Содержание....2
Тур по C++....9
Благодарность....11
Основы....12
1.1 Введение....12
1.2 Программы....12
1.2.1 Hello, World!....13
1.3 Функции....15
1.4 Типы, Переменные и Арифметика....16
1.4.1 Арифметика....17
1.4.2 Инициализация....19
1.5 Область видимости и время жизни....20
1.6 Константы....21
1.7 Указатели, Массивы и Ссылки....22
1.7.1 Нулевой указатель....24
1.8 Условные операторы....25
1.9 Сопоставление с аппаратным обеспечением....27
1.9.1 Присваивание....27
1.9.2 Инициализация....28
1.10 Советы....29
Пользовательские типы....31
2.1 Введение....31
2.2 Структуры....32
2.3 Классы....33
2.4 Перечисления....35
2.5 Объединения....36
2.6 Советы....38
Модульность....39
3.1 Введение....39
3.2 Раздельная компиляция....40
3.2.1 Заголовочные файлы....40
3.2.2 Модули....42
3.3 Пространства имён....45
3.4 Аргументы функции и возвращаемые значения....47
3.4.1 Передача аргументов....47
3.4.2 Возвращение значений....48
3.4.3 Выведение типа возвращаемого значения....50
3.4.4 Суффиксная запись типа возвращаемого значения....50
3.4.5 Структурное связывание....50
3.5 Советы....52
Обработка ошибок....53
4.1 Введение....53
4.2 Исключения....54
4.3 Инварианты....55
4.4 Альтернативные способы обработки ошибок....57
4.5 Утверждения....59
4.5.1 assert()....60
4.5.2 static_assert()....60
4.5.3 noexcept....61
4.6 Советы....61
Классы....63
5.1 Введение....63
5.1.1 Классы....64
5.2 Конкретные типы....64
5.2.1 Арифметические типы....65
5.2.2 Контейнеры....67
5.2.3 Инициализация контейнеров....68
5.3 Абстрактные типы....70
5.4 Виртуальные функции....73
5.5 Иерархии классов....73
5.5.1 Преимущества иерархий....76
5.5.2 Навигация в иерархии....77
5.5.3 Предотвращение утечки ресурсов....78
5.6 Советы....79
Основные операции....81
6.1 Введение....81
6.1.1 Основные операции....81
6.1.2 Преобразования типов....83
6.1.3 Инициализация элементов....84
6.2 Копирование и перемещение....84
6.2.1 Копирование контейнеров....84
6.2.2 Перемещение контейнеров....86
6.3 Управление ресурсами....88
6.4 Перегрузка операторов....90
6.5 Стандартные операции....91
6.5.1 Операторы сравнения....91
6.5.2 Операции с контейнерами....92
6.5.3 Итераторы и “умные указатели”....93
6.5.4 Операции ввода-вывода....93
6.5.5 swap()....94
6.5.6 hash<>....94
6.6 Пользовательские литералы....94
6.7 Советы....95
Шаблоны....97
7.1 Введение....97
7.2 Параметризованные типы....97
7.2.1 Ограниченные аргументы шаблона....99
7.2.2 Аргументы-значения шаблона....100
7.2.3 Выведение типов аргументов шаблонов....101
7.3 Параметризированные операции....102
7.3.1 Шаблоны функций....103
7.3.2 Функциональные объекты....103
7.3.3 Лямбда выражения....105
7.3.3.1 Лямбды как аргументы функции....105
7.3.3.2 Лямбды для инициализации....106
7.3.3.3 Напоследок, finally()....108
7.4 Механизмы шаблонов....108
7.4.1 Шаблоны переменных....109
7.4.2 Псевдонимы....109
7.4.3 if времени компиляции....110
7.5 Советы....111
Концепты и обобщенное программирование....113
8.1 Введение....113
8.2 Концепты....114
8.2.1 Использование концептов....114
8.2.2 Перегрузка основанная на концептах....116
8.2.3 Правильный код....117
8.2.4 Определение концептов....117
8.2.4.1 Проверка определения....120
8.2.5 Концепты и auto....120
8.2.6 Концепты и типы....121
8.3 Обобщённое программирование....122
8.3.1 Использование концептов....122
8.3.2 Абстракции использующие шаблоны....123
8.4 Шаблоны с переменным числом аргументов....124
8.4.1 Выражения свёртки....125
8.4.2 Передача аргументов....126
8.5 Модель компиляции шаблонов....127
8.6 Советы....128
Обзор стандартной библиотеки....129
9.1 Введение....129
9.2 Компоненты стандартной библиотеки....130
9.3 Организация стандартной библиотеки....131
9.3.1 Пространства имён....131
9.3.2 Пространство имён ranges....132
9.3.3 Модули....133
9.3.4 Заголовочные файлы....133
9.4 Советы....134
Строки и регулярные выражения....135
10.1 Введение....135
10.2 Строки....135
10.2.1 Реализация string....137
10.3 Строковые представления....138
10.4 Регулярные выражения....139
10.4.1 Поиск....140
10.4.2 Описание регулярных выражений....141
10.4.3 Итераторы....145
10.5 Советы....145
Ввод и вывод....148
11.1 Введение....148
11.2 Вывод....149
11.3 Ввод....150
11.4 Состояния потоков I/O....151
11.5 I/O пользовательских типов....152
11.6 Форматирование вывода....153
11.6.1 Форматирование потока....153
11.6.2 Форматирование в стиле printf()....155
11.7 Потоки....157
11.7.1 Стандартные потоки....157
11.7.2 Файловые потоки....158
11.7.3 Строковые потоки....158
11.7.4 Потоки памяти....159
11.7.5 Синхронизированные потоки....159
11.8 I/O в стиле Си....160
11.9 Файловая система....160
11.9.1 Пути....161
11.9.2 Файлы и каталоги....163
11.10 Советы....164
Контейнеры....166
12.1 Введение....166
12.2 vector....166
12.2.1 Элементы....169
12.2.2 Проверка диапазона....169
12.3 list....171
12.5 map....173
12.6 unordered_map....174
12.7 Аллокаторы....175
12.8 Обзор контейнеров....177
12.9 Советы....178
Алгоритмы....181
13.1 Введение....181
13.2 Применение итераторов....183
13.3 Типы итераторов....185
13.3.1 Потоковые итераторы....186
13.4 Использование предикатов....188
13.5 Обзор алгоритмов....189
13.6 Параллельные алгоритмы....190
13.7 Советы....191
Диапазоны....192
14.1 Введение....192
14.2 Представления....193
14.3 Генераторы....195
14.4 Конвейеры....195
14.5 Обзор концептов....196
14.5.1 Концепты типов....197
14.5.2 Концепты итераторов....199
14.5.3 Концепты диапазонов....200
14.6 Советы....201
Умные указатели и контейнеры....202
15.1 Введение....202
15.2 Указатели....203
15.2.1 unique_ptr и shared_ptr....204
15.2.2 span....207
15.3 Контейнеры....208
15.3.1 array....209
15.3.2 bitset....211
15.3.3 pair....212
15.3.4 tuple....214
15.4 Альтернативы....215
15.4.1 variant....215
15.4.2 optional....217
15.4.3 any....218
15.5 Советы....218
Утилиты....220
16.1 Введение....220
16.2 Время....220
16.2.1 Часы....221
16.2.2 Календари....221
16.2.3 Временные зоны....222
16.3 Адаптация функций....223
16.3.1 Лямбды как адапторы....223
16.3.2 mem_fn()....223
16.3.3 function....224
16.4 Функция типа....224
16.4.1 Предикаты типа....225
16.4.2 Условные свойства....227
16.4.3 Генераторы типов....228
16.4.4 Связанные типы....228
16.5 source_location....229
16.6 move() and forward()....229
16.7 Битовые манипуляции....231
16.8 Выход из программы....232
16.9 Советы....232
Числовые вычисления....234
17.1 Введение....234
17.2 Математические функции....235
17.3 Численные алгоритмы....236
17.3.1 Многопоточные численные алгоритмы....236
17.4 Комплексные числа....237
17.5 Случайные числа....238
17.6 Векторная арифметика....240
17.7 Числовые ограничения....240
17.8 Псевдонимы типов....240
17.9 Математические константы....241
17.10 Советы....241
Параллелизм....243
18.1 Введение....243
18.2 Задачи и thread....244
18.2.1 Передача аргументов....245
18.2.2 Возвращение результатов....246
18.3 Обмен данными....247
18.3.1 mutex и блокировки....247
18.3.2 atomic....248
18.4 Ожидание событий....249
18.5 Коммуникации задач....250
18.5.1 future и promise....251
18.5.2 packaged_task....252
18.5.3 async()....253
18.5.4 Остановка thread....254
18.6 Корутины (сопрограммы)....255
18.6.1 Кооперативная многозадачность....256
18.7 Советы....259
История и совместимость....261
19.1 История....261
19.1.1 Временная шкала....262
19.1.2 Ранние годы....263
19.1.3 Стандарты ISO C++....266
19.1.4 Стандарты и стиль....268
19.1.5 Использование C++....269
19.1.6 Модель C++....269
19.2 Эволюция функций C++....270
19.2.1 Языковые особенности C++11....270
19.2.2 Языковые особенности C++14....271
19.2.3 Языковые особенности C++17....271
19.2.4 Языковые особенности C++20....272
19.2.5 Компоненты стандартной библиотеки C++11....272
19.2.6 Компоненты стандартной библиотеки C++14....273
19.2.7 Компоненты стандартной библиотеки C++17....273
19.2.8 Компоненты стандартной библиотеки C++20....273
19.2.9 Удаленные и устаревшие функции....274
19.3 Совместимость C/C++....275
19.3.1 C и C++ - родные братья....275
19.3.2 Проблемы совместимости....277
19.3.2.1 Проблемы стиля....277
19.3.2.2 void*....278
19.3.2.3 Линковка....279
19.4 Библиография....279
19.5 Советы....282
Модуль std....284
A.1 Введение....284
A.2 Используйте то, что предлагает Ваша реализация....285
A.3 Используйте заголовки....285
A.4 Сделайте свой собственный module std....285
A.5 Советы....286
Index....287
В третьем издании "Экскурсии по C+", Бьярне Страуструп дает обзор стандарта ISO C++, C++20, цель которого - дать опытным программистам четкое представление о том, что представляет собой современный C++. Это пересмотренное и обновленное издание, содержащее тщательно проработанные примеры и практическую помощь для начала работы, кратко описывает большинство основных языковых возможностей и основные компоненты стандартной библиотеки, необходимые для эффективного использования.
Страуструп представляет возможности C++ в контексте поддерживаемых ими стилей программирования, таких как объектно-ориентированное и универсальное программирование. Его экскурсия на удивление обширна. Освещение начинается с основ, затем широко распространяется по более продвинутым темам, уделяя особое внимание новым языковым возможностям. В этом издании рассматриваются многие новые функции C++20, реализованные основными поставщиками C++, включая модули, концепции, сопрограммы и диапазоны. В нем даже представлены некоторые используемые в настоящее время библиотечные компоненты, включение которых в стандарт не запланировано до C++23.
Это авторитетное руководство не ставит своей целью научить вас программировать (об этом читайте в книге Страуструпа "Программирование: принципы и практика использования C++", второе издание), и оно не будет единственным ресурсом, который вам понадобится для овладения C++ (об этом читайте в книге Страуструпа "Язык программирования C++", четвертое издание). Издание и рекомендуемые онлайн-источники). Однако, если вы программист на C или C++, желающий лучше познакомиться с текущим языком C++, или программист, разбирающийся в другом языке, желающий получить точное представление о природе и преимуществах современного C++, вы не найдете более короткого или простого введения.