Начать бесплатный период
Searching...
SoBrief
Русский
EnglishEnglish
EspañolSpanish
简体中文Chinese
繁體中文Chinese (Traditional)
FrançaisFrench
DeutschGerman
日本語Japanese
PortuguêsPortuguese
ItalianoItalian
한국어Korean
РусскийRussian
NederlandsDutch
العربيةArabic
PolskiPolish
हिन्दीHindi
Tiếng ViệtVietnamese
SvenskaSwedish
ΕλληνικάGreek
TürkçeTurkish
ไทยThai
ČeštinaCzech
RomânăRomanian
MagyarHungarian
УкраїнськаUkrainian
Bahasa IndonesiaIndonesian
DanskDanish
SuomiFinnish
БългарскиBulgarian
עבריתHebrew
NorskNorwegian
HrvatskiCroatian
CatalàCatalan
SlovenčinaSlovak
LietuviųLithuanian
SlovenščinaSlovenian
СрпскиSerbian
EestiEstonian
LatviešuLatvian
فارسیPersian
മലയാളംMalayalam
தமிழ்Tamil
اردوUrdu
Язык программирования C++
Попробуйте полный доступ на 3 дня
Откройте прослушивание и многое другое!
Продолжить

Ключевые идеи

1. C++: язык для изящных и эффективных абстракций

C++ — это язык, созданный для разработки и использования изящных и эффективных абстракций.

Двойственная природа. C++ задуман как мост между низкоуровневым доступом к аппаратуре и высокоуровневыми предметными областями. Он унаследовал от C эффективность для системного программирования и при этом добавил мощные механизмы абстракции, вдохновлённые Simula. Цель — предоставить язык, который одновременно быстр и выразителен, позволяя программистам напрямую отражать концепции в коде.

  • Прямое отображение на аппаратный уровень
  • Доступные механизмы абстракции
  • Язык общего назначения
  • Смещение в сторону системного программирования

Нулевые накладные расходы. Один из ключевых принципов C++ — «принцип нулевых накладных расходов»: вы не платите за то, что не используете. Особенности языка и базовые абстракции спроектированы так, чтобы быть не менее эффективными, чем вручную написанный код. Это критично для приложений с высокими требованиями к производительности и инфраструктурного ПО.

  • Максимальная эффективность
  • Отсутствие скрытых затрат за неиспользуемые возможности
  • Подходит для ресурсов ограниченных сред

Выражение идей. Язык помогает программистам ясно и прямо выражать идеи в коде. Это значит представлять концепции как типы, отношения — как иерархии или параметризации, а независимые идеи — независимо друг от друга. Поощряется синтез разных стилей программирования для достижения лучших решений.

  • Прямое выражение идей
  • Представление отношений
  • Разделение независимых идей
  • Простые идеи — простым языком

2. Современный C++ (C++11) — это другой уровень

C++ ощущается как совершенно новый язык.

Значительная эволюция. За годы язык претерпел кардинальные улучшения, особенно с выходом стандарта C++11. Эти изменения сделали C++ гораздо более мощным и отточенным инструментом для создания качественного ПО. Современный C++ позволяет яснее, проще и прямее выражать идеи.

  • C++11 против C++98
  • Повышенная выразительность
  • Улучшенная безопасность и производительность

Ключевые возможности. C++11 привнёс множество новшеств, которые фундаментально изменили стиль написания и использования языка. Среди них — поддержка параллелизма, управление ресурсами, обобщённое программирование и синтаксические удобства, снижающие шаблонный код.

  • Поддержка параллелизма (std::thread, std::mutex)
  • Семантика перемещения (std::move, rvalue-ссылки)
  • Умные указатели (unique_ptr, shared_ptr)
  • Лямбда-выражения
  • auto и constexpr
  • Инициализаторы списков

Принятие современных стилей. Программистам настоятельно рекомендуется использовать возможности и стили современного C++. Упор на старый C++98 или C-стиль ведёт к менее качественному, менее поддерживаемому и потенциально менее производительному коду. Стандарт гарантирует обратную совместимость, но прогресс не остановить.

3. Классы: основа абстракции

Центральная особенность языка C++ — класс.

Пользовательские типы. Классы — главный механизм создания пользовательских типов, которые напрямую отражают концепции предметной области в коде. Хорошо продуманный набор классов облегчает понимание, анализ и изменение программы.

  • Представление концепций через типы
  • Основа механизмов абстракции
  • Повышение ясности и удобства поддержки кода

Инкапсуляция. Классы позволяют чётко разделять публичный интерфейс (то, что видят и используют пользователи) и приватную реализацию (данные и вспомогательные функции). Это обеспечивает сокрытие данных, гарантирует корректное использование и позволяет менять реализацию без влияния на пользовательский код.

  • Публичный интерфейс
  • Приватная реализация
  • Сокрытие данных
  • Разделение ответственности

Конструкторы и деструкторы. Конструкторы определяют, как объекты инициализируются, гарантируя их валидное состояние при создании. Деструкторы отвечают за очистку при уничтожении объекта, что важно для освобождения ресурсов. Эта пара — фундамент для управления ресурсами, например, в RAII.

  • Гарантированная инициализация
  • Захват ресурсов (конструкторы)
  • Освобождение ресурсов (деструкторы)
  • Инварианты класса

4. Управление ресурсами: RAII и умные указатели

Комбинация конструктора и деструктора лежит в основе многих изящных техник.

Принцип RAII. Resource Acquisition Is Initialization (RAII) — фундаментальный приём в C++, где захват ресурса привязан к инициализации объекта (конструктор), а освобождение — к его уничтожению (деструктор). Это гарантирует правильное управление ресурсами даже при исключениях или досрочном выходе из функций.

  • Захват ресурсов в конструкторах
  • Освобождение ресурсов в деструкторах
  • Автоматическая очистка при выходе из области видимости
  • Безопасность при исключениях

Предотвращение утечек. RAII помогает избежать утечек ресурсов (например, памяти) и других ошибок управления (преждевременное или двойное удаление). Владелец ресурса инкапсулирован в объекте, и компилятор автоматически заботится об очистке.

  • Исключает «голые» new и delete
  • Предотвращает утечки памяти
  • Управляет файлами, блокировками, потоками и др.

Умные указатели. unique_ptr и shared_ptr — стандартные умные указатели, использующие RAII для управления динамической памятью. unique_ptr обеспечивает эксклюзивное владение, shared_ptr — совместное через подсчёт ссылок. Они предпочтительнее сырых указателей для управления объектами в куче.

  • unique_ptr (эксклюзивное владение)
  • shared_ptr (совместное владение)
  • Автоматическое освобождение памяти
  • Избегание ручных вызовов delete

5. Шаблоны: основа обобщённого программирования

Шаблон — это класс или функция, параметризованные типами или значениями.

Параметризация на этапе компиляции. Шаблоны позволяют создавать классы, функции и псевдонимы типов, параметризованные типами, значениями или другими шаблонами. Это даёт возможность писать код, работающий с разными типами без потери производительности.

  • Параметризация типом или значением
  • Полиморфизм на этапе компиляции
  • Генерация кода

Обобщённое программирование. Шаблоны — фундамент обобщённого программирования в C++, ориентированного на создание алгоритмов и структур данных, работающих с любыми типами, удовлетворяющими определённым требованиям (концептам). Это позволяет писать переиспользуемый, типобезопасный и эффективный код.

  • Проектирование универсальных алгоритмов
  • Работа с разными типами
  • Концепты (требования к аргументам)

Эффективность. Шаблоны — механизм времени компиляции, поэтому их использование обычно не влечёт накладных расходов во время выполнения по сравнению с эквивалентным вручную написанным кодом. Это достигается за счёт инлайнинга и вычислений на этапе компиляции.

  • Нулевые накладные расходы во время выполнения
  • Поддержка инлайнинга
  • Вычисления на этапе компиляции

6. Стандартная библиотека: ваш незаменимый набор инструментов

Ни одна серьёзная программа не пишется только на голом языке программирования.

Необходимые компоненты. Стандартная библиотека предоставляет широкий набор фундаментальных компонентов, необходимых почти для любой программы на C++. Это контейнеры, алгоритмы, средства ввода-вывода, утилиты и поддержка параллелизма.

  • Контейнеры (vector, list, map, set)
  • Алгоритмы (sort, find, copy, unique)
  • Потоки ввода-вывода (cin, cout, cerr)
  • Утилиты (pair, tuple, умные указатели, время)
  • Поддержка параллелизма

Основа. Стандартная библиотека написана на самом C++, демонстрируя мощь языка и служа образцом хорошего дизайна. Она является общей базой для других библиотек и приложений, способствуя переносимости и совместимости.

  • Написана на C++
  • Образец хорошего дизайна
  • Способствует переносимости
  • Обеспечивает совместимость

Предпочитайте стандарт. Программистам настоятельно рекомендуется использовать компоненты стандартной библиотеки, а не изобретать велосипед. Стандартные компоненты хорошо спроектированы, оптимизированы, широко доступны и известны, что снижает затраты на поддержку и повышает качество кода.

  • Не изобретайте велосипед
  • Хороший дизайн и оптимизация
  • Широкая доступность и известность

7. Параллелизм: встроенная поддержка многозадачности

Параллелизм — выполнение нескольких задач одновременно — широко используется для повышения пропускной способности (использование нескольких процессоров для одной задачи) или улучшения отзывчивости (одна часть программы работает, пока другая ждёт ответа).

Современная возможность. C++ включает надёжную, переносимую и типобезопасную поддержку параллельного программирования, отвечающую требованиям современных многоядерных процессоров. Это важное новшество стандарта C++11.

  • Встроенная поддержка
  • Переносимость и типобезопасность
  • Ориентация на многоядерные процессоры

Потоки и задачи. Библиотека предоставляет низкоуровневое управление потоками (std::thread) и высокоуровневые абстракции задач (std::future, std::async). Потоки разделяют адресное пространство, что требует аккуратной синхронизации для предотвращения гонок данных.

  • std::thread для системных потоков
  • Общее адресное пространство
  • Задачи на основе потоков (std::async)

Синхронизация. Для управления доступом к общим данным и синхронизации потоков предоставлены мьютексы (std::mutex), условные переменные (std::condition_variable) и атомарные операции для тонкой, безблокировочной синхронизации простых типов.

  • Мьютексы и блокировки
  • Условные переменные
  • Атомарные операции
  • Предотвращение гонок данных

8. Освоение типов и базовых средств

Каждое имя и выражение имеют связанный с ними тип.

Фундаментальные строительные блоки. Понимание встроенных типов C++ (int, double, char, bool), правил объявления переменных, области видимости и базовых управляющих конструкций (if, switch, for, while) — основа всего программирования на C++. Эти элементы унаследованы и расширены из C.

  • Встроенные типы
  • Объявления и область видимости
  • Управляющие конструкции
  • Выражения и операторы

Типобезопасность. C++ — статически типизированный язык, что означает проверку типов на этапе компиляции. Это помогает ловить ошибки заранее. Такие возможности, как auto для вывода типа и constexpr для констант времени компиляции, повышают безопасность и выразительность.

  • Статическая проверка типов
  • Раннее обнаружение ошибок
  • auto для вывода типа
  • constexpr для констант времени компиляции

Указатели и ссылки. C++ предоставляет указатели и ссылки для косвенного доступа к памяти. Хотя это мощные инструменты, они требуют аккуратного управления, особенно при владении ресурсами. Для управления памятью в куче предпочтительнее умные указатели.

  • Указатели и ссылки
  • Косвенный доступ к памяти
  • Умные указатели для владения

9. Сочетание стилей программирования для эффективных решений

Лучшее (наиболее поддерживаемое, читаемое, компактное, быстрое и т. д.) решение большинства нетривиальных задач обычно сочетает в себе элементы разных стилей.

Синтез, а не исключение. C++ создан для поддержки множества стилей программирования: процедурного, абстракции данных, объектно-ориентированного и обобщённого. Особенности языка позволяют использовать их в комбинации, а самые эффективные решения часто объединяют техники из разных парадигм.

  • Процедурное программирование
  • Абстракция данных
  • Объектно-ориентированное программирование
  • Обобщённое программирование

Избегайте догматизма. Ограничение себя одним стилем или восприятие C++ как «гибридного» языка упускает силу его синтеза. Язык предоставляет инструменты, которые можно элегантно сочетать для поддержки широкого спектра техник.

  • Язык поддерживает комбинации
  • Избегайте однопарадигменного мышления

Практический дизайн. Эффективное программирование на C++ — это выбор правильных инструментов (особенностей языка, компонентов стандартной библиотеки) из доступного набора и их грамотное сочетание для решения конкретной задачи. Это требует понимания сильных и слабых сторон разных подходов и их взаимодействия.

  • Выбирайте подходящие инструменты
  • Эффективно комбинируйте возможности
  • Сосредоточьтесь на дизайне и техниках

10. Обработка ошибок: исключения и гарантии

Исключения созданы, чтобы передавать информацию об ошибке от места её обнаружения к месту обработки.

Разделение ответственности. Исключения (throw, catch) дают возможность отделить код, обнаруживающий ошибку, от кода, её обрабатывающего. Это особенно важно в больших программах и библиотеках, где обнаружитель не знает, как восстановиться, а обработчик не может легко обнаружить ошибку.

  • throw для сообщения об ошибках
  • catch для их обработки
  • Разделение обнаружения и обработки

Гарантии безопасности исключений. Стандартная библиотека даёт гарантии о состоянии объектов при выбрасывании исключений. Базовая гарантия обеспечивает сохранение инвариантов и отсутствие утечек ресурсов. Сильная гарантия гарантирует, что операция либо успешно выполнится, либо не изменит состояние.

  • Базовая гарантия (нет утечек, валидное состояние)
  • Сильная гарантия (всё или ничего)
  • Спецификатор noexcept

Интеграция с RAII. Обработка исключений тесно связана с RAII. Это гарантирует, что ресурсы, захваченные объектами, корректно освобождаются при разворачивании стека во время распространения исключения, предотвращая утечки и упрощая код очистки.

  • RAII для очистки
  • Вызов деструкторов при разворачивании стека

Обновлено:

Report Issue

Обзор отзывов

4.10 из 5
На основе 4 000+ оценок с Goodreads и Amazon.

Язык программирования C++ — это признанный эталон и настольная книга для всех, кто работает с C++, написанная самим создателем языка. Книга получила высокую оценку за глубокое и всестороннее освещение темы, а также за ценные инсайты, которые она предлагает. Однако многие отмечают, что она не подходит для новичков. Текст насыщен информацией, порой кажется перегруженным и излишне подробным, поэтому лучше использовать её как справочник, а не учебник. Опытные программисты ценят её за техническую глубину и детальный разбор, хотя некоторые критикуют стиль изложения и структуру. Тем не менее, для тех, кто стремится овладеть C++ в совершенстве, эта книга — незаменимый источник знаний. В общем, она считается обязательной для профессионалов, но может стать серьёзным испытанием для начинающих.

Your rating:
4.49
128 оценок
Want to read the full book?

Об авторе

Бьёрн Страуструп — датский учёный в области информатики, прославившийся как создатель языка программирования C++. В 1979 году, работая в Bell Labs, он поставил перед собой задачу усовершенствовать язык C, добавив возможности для масштабного программирования. Страуструп сыграл ключевую роль в развитии C++, написав несколько изданий книги «Язык программирования C++» и участвуя в формировании стандарта ISO C++. За свои достижения он удостоен множества наград, включая премию IEEE Computer Society за предпринимательские заслуги в области компьютерных технологий. Страуструп занимал должности в Техасском университете A&M и Колумбийском университете, продолжая влиять на развитие информатики и проектирование языков программирования.

Другие книги автора Бьярне Страуструп

Follow
Слушать
Now playing
Язык программирования C++
0:00
-0:00
Now playing
Язык программирования C++
0:00
-0:00
1x
Queue
Home
Swipe
Library
Get App
Try Full Access for 3 Days
Listen, bookmark, and more
Compare Features Free Pro
📖 Read Summaries
Read unlimited summaries. Free users get 3 per month
🎧 Listen to Summaries
Listen to unlimited summaries in 40 languages
❤️ Unlimited Bookmarks
Free users are limited to 4
📜 Unlimited History
Free users are limited to 4
📥 Unlimited Downloads
Free users are limited to 1
Risk-Free Timeline
Сегодня: мгновенный доступ
Слушайте полные саммари 26 000+ книг. Это более 12 000 часов аудио!
День 2: напоминание о пробном периоде
Мы отправим вам уведомление об окончании пробного периода.
День 3: начало подписки
Оплата будет списана Jun 16,
отмените в любой момент до этой даты.
Consume 2.8× More Books
2.8× more books Listening Reading
Our users love us
600,000+ readers
Trustpilot Rating
TrustPilot
4.6 Excellent
This site is a total game-changer. I've been flying through book summaries like never before. Highly, highly recommend.
— Dave G
Worth my money and time, and really well made. I've never seen this quality of summaries on other websites. Very helpful!
— Em
Highly recommended!! Fantastic service. Perfect for those that want a little more than a teaser but not all the intricate details of a full audio book.
— Greg M
Save 62%
Yearly
$119.88 $44.99/year/yr
$3.75/mo
Monthly
$9.99/mo
Start a 3-Day Free Trial
3 days free, then $44.99/year. Cancel anytime.
Unlock a world of fiction & nonfiction books
26,000+ books for the price of 2 books
Read any book in 10 minutes
Discover new books like Tinder
Request any book if it's not summarized
Read more books than anyone you know
#1 app for book lovers
Lifelike & immersive summaries
30-day money-back guarantee
Download summaries in EPUBs or PDFs
Cancel anytime in a few clicks
Scanner
Find a barcode to scan

We have a special gift for you
Open
38% OFF
DISCOUNT FOR YOU
$79.99
$49.99/year
only $4.16 per month
Continue
2 taps to start, super easy to cancel
Settings
General
Widget
Loading...
We have a special gift for you
Open
38% OFF
DISCOUNT FOR YOU
$79.99
$49.99/year
only $4.16 per month
Continue
2 taps to start, super easy to cancel