Современный C++. Безопасное использование

Современный C++. Безопасное использование

Современный C++. Безопасное использование
Автор: Витторио Ромео, Лакос Джон, Мередит Алисдар, Хлебников Ростислав
Дата выхода: 2022
Издательство: ДМК Пресс
Количество страниц: 1044
Размер файла: 5.4 MB
Тип файла: PDF
Добавил: codelibs
 Проверить на вирусы

Предисловие Шона Эдвардса....16

Предисловие Андрея Александреску....18

Благодарности....21

Об авторах....25

Глава 0....26

Экскурс в компьютерные системы....26

0.1. Чем эта книга отличается от других....26

0.2. Общее содержание первого издания....27

0.3. Основополагающие принципы изложения материала в этой книге....28

0.3.1. Факты, а не мнения....28

0.3.2. Объяснение, а не указание....28

0.3.3. Скрупулезно, а не поверхностно....28

0.3.4. Примеры из реальной практики, а не придуманные....29

0.3.5. Масштабируемые, но не слишком упрощенные программы....29

0.4. Что в действительности означает слово «безопасно»....29

0.5. Безопасная функциональная возможность....30

0.6. Условно безопасная функциональная возможность....30

0.7. Небезопасная функциональная возможность....30

0.8. Каталог функциональных возможностей современного C++....31

0.8.1. Как организована эта книга....31

0.9. Как использовать эту книгу....33

Глава 1....34

Безопасные функциональные возможности....34

1.1. Поддержка обобщенных атрибутов....34

1.1.1. Описание....35

1.1.2. Варианты использования....37

1.1.3. Потенциальные опасности....40

1.1.4. Смотрите также....41

1.1.5. Материал для дополнительного чтения....41

1.2. Последовательные правые угловые скобки....41

1.2.1. Описание....41

1.2.2. Варианты использования....42

1.2.3. Потенциальные опасности....42

1.2.4. Материал для дополнительного чтения....44

1.3. Оператор для извлечения типов выражений....44

1.3.1. Описание....44

1.3.2. Варианты использования....45

1.3.3. Потенциальные опасности....48

1.3.4. Неудобства....49

1.3.5. Смотрите также....49

1.4. Использование = default для специальных функций-членов....50

1.4.1. Описание....50

1.4.2. Варианты использования....53

1.4.3. Потенциальные опасности....57

1.4.4. Неудобства....57

1.4.5. Смотрите также....58

1.4.6. Материал для дополнительного чтения....59

1.4.7. Приложение....59

1.5. Конструкторы, вызывающие другие конструкторы....60

1.5.1. Описание....60

1.5.2. Варианты использования....61

1.5.3. Потенциальные опасности....63

1.5.4. Смотрите также....64

1.6. Использование = delete для любых функций....65

1.6.1. Описание....65

1.6.2. Варианты использования....65

1.6.3. Неудобства....69

1.6.4. Смотрите также....70

1.6.5. Материал для дополнительного чтения....71

1.7. Операторы явного преобразования....71

1.7.1. Описание....71

1.7.2. Варианты использования....73

1.7.3. Потенциальные опасности....74

1.8. Потокобезопасные static переменные в области видимости функции....76

1.8.1. Описание....76

1.8.2. Варианты использования....79

1.8.3. Потенциальные опасности....82

1.8.4. Неудобства....86

1.8.5. Материал для дополнительного чтения....87

1.8.6. Приложение....87

1.9. Локальные/неименованные типы как аргументы шаблона....88

1.9.1. Описание....88

1.9.2. Варианты использования....89

1.9.3. Смотрите также....92

1.10. Целочисленный тип long long (≥ 64 бита)....92

1.10.1. Описание....92

1.10.2. Варианты использования....93

1.10.3. Потенциальные опасности....95

1.10.4. Смотрите также....95

1.10.5. Материал для дополнительного чтения....95

1.10.6. Приложение....96

1.11. Атрибут [[noreturn]]....97

1.11.1. Описание....97

1.11.2. Варианты использования....97

1.11.3. Потенциальные опасности....99

1.11.4. Смотрите также....100

1.11.5. Материал для дополнительного чтения....100

1.12. Ключевое слово для литерала с нулевым указателем....100

1.12.1. Описание....100

1.12.2. Варианты использования....101

1.12.3. Материал для дополнительного чтения....103

1.13. Спецификатор функции-члена override....103

1.13.1. Описание....103

1.13.2. Варианты использования....104

1.13.3. Потенциальные опасности....105

1.13.4. Материал для дополнительного чтения....105

1.14. Синтаксис для необработанного содержимого строк....106

1.14.1. Описание....106

1.14.2. Варианты использования....109

1.14.3. Потенциальные опасности....109

1.15. Утверждения времени компиляции....111

1.15.1. Описание....111

1.15.2. Варианты использования....114

1.15.3. Потенциальные опасности....115

1.15.4. Неудобства....118

1.15.5. Смотрите также....118

1.15.6. Материал для дополнительного чтения....118

1.16. Хвостовые типы возвращаемых значений функций....119

1.16.1. Описание....119

1.16.2. Варианты использования....121

1.16.3. Смотрите также....122

1.16.4. Материал для дополнительного чтения....122

1.17. Строковые литералы в кодировке Unicode....122

1.17.1. Описание....122

1.17.2. Варианты использования....123

1.17.3. Потенциальные опасности....124

1.18. Псевдонимы типа/шаблона (расширенный typedef)....125

1.18.1. Описание....125

1.18.2. Варианты использования....126

1.18.3. Смотрите также....128

1.19. Агрегаты, содержащие инициализаторы членов по умолчанию....128

1.19.1. Описание....129

1.19.2. Варианты использования....129

1.19.3. Потенциальные опасности....130

1.19.4. Неудобства....131

1.19.5. Смотрите также....131

1.20. Двоичные литералы: префикс 0b....132

1.20.1. Описание....132

1.20.2. Варианты использования....133

1.20.3. Смотрите также....135

1.20.4. Материал для дополнительного чтения....135

1.21. Атрибут [[deprecated]]....135

1.21.1. Описание....135

1.21.2. Варианты использования....136

1.21.3. Потенциальные опасности....138

1.22. Разделитель разрядов числа (')....138

1.22.1. Описание....138

1.22.2. Варианты использования....139

1.22.3. Смотрите также....140

1.22.4. Материал для дополнительного чтения....140

1.22.5. Приложение....140

1.23. Объявления/определения шаблона переменной....142

1.23.1. Описание....142

1.23.2. Варианты использования....144

1.23.3. Потенциальные опасности....146

1.23.4. Неудобства....148

1.23.5. Смотрите также....148

Глава 2....149

Условно безопасные функциональные возможности....149

2.1. Спецификатор alignas....150

2.1.1. Описание....150

2.1.2. Варианты использования....153

2.1.3. Потенциальные опасности....156

2.1.4. Смотрите также....159

2.1.5. Приложение....159

2.2. Оператор alignof....163

2.2.1. Описание....163

2.2.2. Варианты использования....165

2.2.3. Неудобства....170

2.2.4. Смотрите также....171

2.3. Переменные автоматически выводимого типа....171

2.3.1. Описание....171

2.3.2. Варианты использования....175

2.3.3. Потенциальные опасности....178

2.3.4. Неудобства....184

2.3.5. Смотрите также....186

2.3.6. Материал для дополнительного чтения....186

2.4. Синтаксис инициализации с использованием фигурных скобок: {}....186

2.4.1. Описание....186

2.4.2. Варианты использования....204

2.4.3. Потенциальные опасности....209

2.4.4. Неудобства....213

2.4.5. Смотрите также....220

2.4.6. Материал для дополнительного чтения....220

2.5. Функции, вызываемые во время компиляции....220

2.5.1. Описание....221

2.5.2. Варианты использования....244

2.5.3. Потенциальные опасности....252

2.5.4. Неудобства....256

2.5.5. Смотрите также....257

2.5.6. Материал для дополнительного чтения....257

2.6. Переменные, доступные во время компиляции....257

2.6.1. Описание....257

2.6.2. Варианты использования....262

2.6.3. Потенциальные опасности....267

2.6.4. Неудобства....267

2.6.5. Смотрите также....269

2.7. Инициализаторы по умолчанию членов класса/объединения....270

2.7.1. Описание....270

2.7.2. Варианты использования....273

2.7.3. Потенциальные опасности....276

2.7.4. Неудобства....278

2.7.5. Смотрите также....280

2.8. Строго типизированные перечисления с областью видимости....280

2.8.1. Описание....280

2.8.2. Варианты использования....285

2.8.3. Потенциальные опасности....290

2.8.4. Неудобства....295

2.8.5. Смотрите также....296

2.8.6. Материал для дополнительного чтения....296

2.9. Объявления с созданием экземпляра объекта с явным указанием параметров....296

2.9.1. Описание....296

2.9.2. Варианты использования....306

2.9.3. Потенциальные опасности....310

2.9.4. Неудобства....312

2.9.5. Смотрите также....314

2.9.6. Материал для дополнительного чтения....314

2.10. Перенаправляющие ссылки (T&&)....314

2.10.1. Описание....315

2.10.2. Варианты использования....321

2.10.3. Потенциальные опасности....328

2.10.4. Неудобства....331

2.10.5. Смотрите также....333

2.10.6. Материал для дополнительного чтения....333

2.11. Тривиальные типы и типы со стандартной схемой размещения....334

2.11.1. Описание....334

2.11.2. Варианты использования....366

2.11.3. Потенциальные опасности....398

2.11.4. Неудобства....433

2.11.5. Смотрите также....440

2.11.6. Материал для дополнительного чтения....440

2.11.7. Приложение....440

2.12. Наследуемые конструкторы базового класса....444

2.12.1. Описание....444

2.12.2. Варианты использования....447

2.12.3. Потенциальные опасности....453

2.12.4. Неудобства....455

2.12.5. Смотрите также....458

2.13. Списковая инициализация: std::initializer_list....458

2.13.1. Описание....458

2.13.2. Варианты использования....465

2.13.3. Потенциальные опасности....469

2.13.4. Неудобства....470

2.13.5. Смотрите также....473

2.13.6. Материал для дополнительного чтения....473

2.13.7. Приложение....473

2.14. Анонимные объекты-функции (замыкания)....474

2.14.1. Описание....474

2.14.2. Варианты использования....494

2.14.3. Потенциальные опасности....502

2.14.4. Неудобства....505

2.14.5. Смотрите также....507

2.14.6. Материал для дополнительного чтения....507

2.15. Запрос: запрещено ли выражению генерировать исключение (throw)....508

2.15.1. Описание....508

2.15.2. Варианты использования....523

2.15.3. Потенциальные опасности....535

2.15.4. Неудобства....537

2.15.5. Смотрите также....543

2.15.6. Материал для дополнительного чтения....544

2.15.7. Приложение....544

2.16. Нечеткие объявления перечислений....545

2.16.1. Описание....545

2.16.2. Примеры использования....547

2.16.3. Потенциальные опасности....557

2.16.4. Неудобства....559

2.16.5. Смотрите также....560

2.16.6. Материал для дополнительного чтения....560

2.17. Циклы for на основе диапазона значений....560

2.17.1. Описание....560

2.17.2. Варианты использования....565

2.17.3. Потенциальные опасности....570

2.17.4. Неудобства....580

2.17.5. Смотрите также....584

2.17.6. Материал для дополнительного чтения....584

2.18. Семантика перемещения и ссылки на rvalue (&&)....584

2.18.1. Описание....585

2.18.2. Варианты использования....610

2.18.3. Потенциальные опасности....644

2.18.4. Неудобства....663

2.18.5. Смотрите также....669

2.18.6. Материал для дополнительного чтения....670

2.18.7. Приложение....670

2.19. Явное определение внутреннего типа перечисления....682

2.19.1. Описание....682

2.19.2. Варианты использования....683

2.19.3. Потенциальные опасности....685

2.19.4. Смотрите также....686

2.19.5. Материал для дополнительного чтения....686

2.20. Операторы для литералов, определенных пользователем....686

2.20.1. Описание....687

2.20.2. Варианты использования....702

2.20.3. Потенциальные опасности....713

2.20.4. Неудобства....715

2.20.5. Смотрите также....716

2.20.6. Материал для дополнительного чтения....716

2.21. Шаблоны с переменным количеством аргументов....717

2.21.1. Описание....717

2.21.2. Варианты использования....758

2.21.3. Потенциальные опасности....780

2.21.4. Неудобства....781

2.21.5. Смотрите также....785

2.21.6. Материал для дополнительного чтения....785

2.22. Ослабленные ограничения для constexpr-функций....785

2.22.1. Описание....785

2.22.2. Варианты использования....786

2.22.3. Смотрите также....790

2.22.4. Материал для дополнительного чтения....790

2.22.5. Приложение....790

2.23. Лямбда-выражения, содержащие шаблонный оператор вызова....791

2.23.1. Описание....791

2.23.2. Варианты использования....797

2.23.3. Потенциальные опасности....802

2.23.4. Неудобства....802

2.23.5. Смотрите также....805

2.23.6. Материал для дополнительного чтения....805

2.24. Выражения лямбда-захвата....805

2.24.1. Описание....805

2.24.2. Варианты использования....807

2.24.3. Потенциальные опасности....810

2.24.4. Неудобства....811

2.24.5. Смотрите также....812

2.24.6. Материал для дополнительного чтения....812

Глава 3....813

Небезопасные функциональные возможности....813

3.1. Атрибут [[carries_dependency]]....814

3.1.1. Описание....814

3.1.2. Варианты использования....816

3.1.3. Потенциальные опасности....819

3.1.4. Смотрите также....820

3.1.5. Материал для дополнительного чтения....820

3.2. Запрещение замещения и наследования....820

3.2.1. Описание....820

3.2.2. Варианты использования....826

3.2.3. Потенциальные опасности....833

3.2.4. Неудобства....837

3.2.5. Смотрите также....839

3.2.6. Материал для дополнительного чтения....839

3.3. Расширенные объявления friend....839

3.3.1. Описание....839

3.3.2. Варианты использования....841

3.3.3. Потенциальные опасности....847

3.3.4. Смотрите также....848

3.3.5. Материал для дополнительного чтения....848

3.3.6. Приложение....848

3.4. Прозрачно вложенные пространства имен....858

3.4.2. Варианты использования....864

3.4.3. Потенциальные опасности....875

3.4.4. Неудобства....878

3.4.5. Смотрите также....881

3.4.6. Материал для дополнительного чтения....881

3.4.7. Приложение....881

3.5. Спецификация функции noexcept....883

3.5.1. Описание....883

3.5.2. Варианты использования....890

3.5.3. Потенциальные опасности....905

3.5.4. Неудобства....932

3.5.5. Смотрите также....938

3.5.6. Материал для дополнительного чтения....938

3.6. Функции-члены с квалификаторами-ссылками....938

3.6.1. Описание....938

3.6.2. Варианты использования....944

3.6.3. Потенциальные опасности....952

3.6.4. Неудобства....953

3.6.5. Смотрите также....954

3.6.6. Материал для дополнительного чтения....954

3.7. Объединения, содержащие нетривиальные члены....954

3.7.1. Описание....954

3.7.2. Варианты использования....956

3.7.3. Потенциальные опасности....958

3.7.4. Смотрите также....959

3.7.5. Материал для дополнительного чтения....959

3.8. Вывод возвращаемого типа функции (auto)....959

3.8.1. Описание....959

3.8.2. Варианты использования....968

3.8.3. Потенциальные опасности....973

3.8.4. Неудобства....973

3.8.5. Смотрите также....975

3.9. Вывод типов с использованием семантики decltype....976

3.9.1. Описание....976

3.9.2. Варианты использования....980

3.9.3. Потенциальные опасности....981

3.9.4. Неудобства....982

3.9.5. Смотрите также....982

Послесловие: ретроспектива и перспектива....983

Словарь терминов....984

Предметный указатель....1027

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

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

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


Похожее:

Список отзывов:

Нет отзывов к книге.