Современный C++: безопасное использование
Покупка
Новинка
Тематика:
Программирование на C и C++
Издательство:
ДМК Пресс
Перевод:
Снастин А. В.
Год издания: 2023
Кол-во страниц: 1044
Дополнительно
Вид издания:
Практическое пособие
Уровень образования:
Дополнительное профессиональное образование
ISBN: 978-5-93700-134-4
Артикул: 855971.01.99
В книге рассматриваются функциональные возможности современного языка C++, классифицированные по степени безопасности (безопасные, условно безопасные и небезопасные). Эффективное использование каждой функциональной возможности продемонстрировано на многочисленных примерах; значительная их часть основана на упрощенных фрагментах кода, извлеченных из реальных кодовых баз. Показано, как в современных условиях с сохранением безопасности включить функциональность языка C++11/14 в уже существующую кодовую базу C++98/03.
Книга послужит удобным справочным руководством для опытных программистов на C++, знакомых с версией C++98/03.
Тематика:
ББК:
УДК:
ОКСО:
- ВО - Бакалавриат
- 09.03.01: Информатика и вычислительная техника
- 09.03.02: Информационные системы и технологии
- 09.03.03: Прикладная информатика
ГРНТИ:
Скопировать запись
Фрагмент текстового слоя документа размещен для индексирующих роботов
Джон Лакос, Витторио Ромео, Ростислав Хлебников, Алисдар Мередит Современный C++: безопасное использование
Embracing Modern C++ Safely John Lakos Vittorio Romeo Rostislav Khlebnikov Alisdair Meredith Boston • Columbus • New York • San Francisco • Amsterdam • Cape Town Dubai • London • Madrid • Milan • Munich • Paris • Montreal • Toronto • Delhi • Mexico City São Paulo • Sydney • Hong Kong • Seoul • Singapore • Taipei • Tokyo
Москва, 2023 Современный C++: безопасное использование Джон Лакос Витторио Ромео Ростислав Хлебников Алисдар Мередит
УДК 004.04 ББК 32.372 Л19 Л19 Джон Лакос, Витторио Ромео, Ростислав Хлебников, Алисдар Мередит Современный C++: безопасное использование / пер. с англ. А. В. Снастина. – М.: ДМК Пресс, 2023. – 1042 с.: ил. ISBN 978-5-93700-134-4 В книге рассматриваются функциональные возможности современного языка C++, классифицированные по степени безопасности (безопасные, условно безопасные и небезопасные). Эффективное использование каждой функциональной возможности продемонстрировано на многочисленных примерах; значительная их часть основана на упрощенных фрагментах кода, извлеченных из реальных кодовых баз. Показано, как в современных условиях с сохранением безопасности включить функциональность языка C++11/14 в уже существующую кодовую базу C++98/03. Книга послужит удобным справочным руководством для опытных программистов на C++, знакомых с версией C++98/03. Copyright Authorized translation from the English language edition, entitled Embracing Modern C++ Safely, 1st Edition by John Lakos; Vittorio Romeo; Rostislav Khlebnikov; Alisdair Meredith, published by Pearson Education, Inc, publishing as Addison-Wesley Professional, Copyright © 2022. All rights reserved. No part of this book may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying, recording or by any information storage retrieval system, without permission from Pearson Education, Inc. Все права защищены. Любая часть этой книги не может быть воспроизведена в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Материал, изложенный в данной книге, многократно проверен. Но, поскольку вероятность технических ошибок все равно существует, издательство не может гарантировать абсолютную точность и правильность приводимых сведений. В связи с этим издательство не несет ответственности за возможные ошибки, связанные с использованием книги. ISBN 978-0-13-738035-0 (англ.) Copyright © 2022 Pearson Education, Inc. ISBN 978-5-93700-134-4 (рус.) © Оформление, перевод на русский язык, издание, ДМК Пресс, 2023
Моей любимой жене Элайзе, которую я очень люблю, всегда любил и всегда буду любить: «Когда я беру слово, оно означает то, что я хочу, не больше и не меньше, – сказал Шалтай-Болтай презрительно». – Льюис Кэролл (Lewis Carroll), «Алиса в Зазеркалье» («Through the Looking-Glass») JSL (Джон С. Лакос) Моим тетям и моему отцу, которые всегда поддерживали меня в каждом аспекте моей жизни. VR (Витторио Ромео) Елене и моим родителям. RK (Ростислав Хлебников) Покойным Дэвиду и Мэри Мередит, любящим родителям, которые поддерживали меня во всем, что я делал, и были бы очень горды, увидев наконец напечатанную книгу своего сына. AM (Алисдар Мередит)
Оглавление Предисловие Шона Эдвардса........................................................................14 Предисловие Андрея Александреску............................................................16 Благодарности................................................................................................19 Об авторах.......................................................................................................23 Глава 0. Экскурс в компьютерные системы.................................................24 0.1. Чем эта книга отличается от других..........................................................24 0.2. Общее содержание первого издания......................................................... 25 0.3. Основополагающие принципы изложения материала в этой книге...... 26 0.3.1. Факты, а не мнения....................................................................................... 26 0.3.2. Объяснение, а не указание............................................................................ 26 0.3.3. Скрупулезно, а не поверхностно.................................................................. 26 0.3.4. Примеры из реальной практики, а не придуманные.................................. 27 0.3.5. Масштабируемые, но не слишком упрощенные программы..................... 27 0.4. Что в действительности означает слово «безопасно».............................. 27 0.5. Безопасная функциональная возможность.............................................. 28 0.6. Условно безопасная функциональная возможность................................ 28 0.7. Небезопасная функциональная возможность.......................................... 28 0.8. Каталог функциональных возможностей современного C++.................. 29 0.8.1. Как организована эта книга.......................................................................... 29 0.9. Как использовать эту книгу........................................................................ 31 Глава 1.Безопасные функциональные возможности.................................32 1.1. Поддержка обобщенных атрибутов........................................................... 32 1.1.1. Описание..........................................................................................................................................33 1.1.2. Варианты использования.............................................................................. 35 1.1.3. Потенциальные опасности........................................................................... 38 1.1.4. Смотрите также.............................................................................................. 39 1.1.5. Материал для дополнительного чтения...................................................... 39 1.2. Последовательные правые угловые скобки.............................................. 39 1.2.1. Описание........................................................................................................ 39 1.2.2. Варианты использования.............................................................................. 40 1.2.3. Потенциальные опасности........................................................................... 40 1.2.4. Материал для дополнительного чтения...................................................... 42 1.3. Оператор для извлечения типов выражений........................................... 42 1.3.1. Описание........................................................................................................ 42 1.3.2. Варианты использования.............................................................................. 43 1.3.3. Потенциальные опасности........................................................................... 46 1.3.4. Неудобства..................................................................................................... 47 1.3.5. Смотрите также.............................................................................................. 47 1.4. Использование = default для специальных функций-членов................... 48 1.4.1. Описание........................................................................................................ 48 1.4.2. Варианты использования.............................................................................. 51 1.4.3. Потенциальные опасности........................................................................... 55
Оглавление 7 1.4.4. Неудобства..................................................................................................... 55 1.4.5. Смотрите также.............................................................................................. 56 1.4.6. Материал для дополнительного чтения...................................................... 57 1.4.7. Приложение.................................................................................................... 57 1.5. Конструкторы, вызывающие другие конструкторы................................. 58 1.5.1. Описание........................................................................................................ 58 1.5.2. Варианты использования.............................................................................. 59 1.5.3. Потенциальные опасности........................................................................... 61 1.5.4. Смотрите также.............................................................................................. 62 1.6. Использование = delete для любых функций.............................................. 63 1.6.1. Описание........................................................................................................ 63 1.6.2. Варианты использования.............................................................................. 63 1.6.3. Неудобства..................................................................................................... 67 1.6.4. Смотрите также.............................................................................................. 68 1.6.5. Материал для дополнительного чтения...................................................... 69 1.7. Операторы явного преобразования........................................................... 69 1.7.1. Описание........................................................................................................ 69 1.7.2. Варианты использования.............................................................................. 71 1.7.3. Потенциальные опасности............................................................................ 72 1.8. Потокобезопасные static переменные в области видимости функции..... 74 1.8.1. Описание........................................................................................................ 74 1.8.2. Варианты использования.............................................................................. 77 1.8.3. Потенциальные опасности........................................................................... 80 1.8.4. Неудобства..................................................................................................... 84 1.8.5. Материал для дополнительного чтения...................................................... 85 1.8.6. Приложение................................................................................................... 85 1.9. Локальные/неименованные типы как аргументы шаблона.................... 86 1.9.1. Описание........................................................................................................ 86 1.9.2. Варианты использования.............................................................................. 87 1.9.3. Смотрите также.............................................................................................. 90 1.10. Целочисленный тип long long (≥ 64 бита)................................................. 90 1.10.1. Описание...................................................................................................... 90 1.10.2. Варианты использования............................................................................ 91 1.10.3. Потенциальные опасности.......................................................................... 93 1.10.4. Смотрите также............................................................................................ 93 1.10.5. Материал для дополнительного чтения..................................................... 93 1.10.6. Приложение................................................................................................. 94 1.11. Атрибут [[noreturn]].................................................................................... 95 1.11.1. Описание...................................................................................................... 95 1.11.2. Варианты использования............................................................................ 95 1.11.3. Потенциальные опасности.......................................................................... 97 1.11.4. Смотрите также............................................................................................ 98 1.11.5. Материал для дополнительного чтения..................................................... 98 1.12. Ключевое слово для литерала с нулевым указателем............................ 98 1.12.1. Описание...................................................................................................... 98 1.12.2. Варианты использования............................................................................ 99 1.12.3. Материал для дополнительного чтения................................................... 101 1.13. Спецификатор функции-члена override................................................. 101 1.13.1. Описание.................................................................................................... 101 1.13.2. Варианты использования.......................................................................... 102
8 Оглавление 1.13.3. Потенциальные опасности........................................................................ 103 1.13.4. Материал для дополнительного чтения................................................... 103 1.14. Синтаксис для необработанного содержимого строк.......................... 104 1.14.1. Описание.................................................................................................... 104 1.14.2. Варианты использования.......................................................................... 107 1.14.3. Потенциальные опасности........................................................................ 107 1.15. Утверждения времени компиляции...................................................... 109 1.15.1. Описание.................................................................................................... 109 1.15.2. Варианты использования.......................................................................... 112 1.15.3. Потенциальные опасности........................................................................ 113 1.15.4. Неудобства.................................................................................................. 116 1.15.5. Смотрите также.......................................................................................... 116 1.15.6. Материал для дополнительного чтения................................................... 116 1.16. Хвостовые типы возвращаемых значений функций........................... 117 1.16.1. Описание.................................................................................................... 117 1.16.2. Варианты использования.......................................................................... 119 1.16.3. Смотрите также.......................................................................................... 120 1.16.4. Материал для дополнительного чтения................................................... 120 1.17. Строковые литералы в кодировке Unicode............................................ 120 1.17.1. Описание.................................................................................................... 120 1.17.2. Варианты использования.......................................................................... 121 1.17.3. Потенциальные опасности........................................................................ 122 1.18. Псевдонимы типа/шаблона (расширенный typedef)............................. 123 1.18.1. Описание.................................................................................................... 123 1.18.2. Варианты использования.......................................................................... 124 1.18.3. Смотрите также.......................................................................................... 126 1.19. Агрегаты, содержащие инициализаторы членов по умолчанию........ 126 1.19.1. Описание.................................................................................................... 127 1.19.2. Варианты использования.......................................................................... 127 1.19.3. Потенциальные опасности........................................................................ 128 1.19.4. Неудобства.................................................................................................. 129 1.19.5. Смотрите также.......................................................................................... 129 1.20. Двоичные литералы: префикс 0b........................................................... 130 1.20.1. Описание.................................................................................................... 130 1.20.2. Варианты использования.......................................................................... 131 1.20.3. Смотрите также.......................................................................................... 133 1.20.4. Материал для дополнительного чтения................................................... 133 1.21. Атрибут [[deprecated]].............................................................................. 133 1.21.1. Описание.................................................................................................... 133 1.21.2. Варианты использования.......................................................................... 134 1.21.3. Потенциальные опасности........................................................................ 136 1.22. Разделитель разрядов числа (').............................................................. 136 1.22.1. Описание.................................................................................................... 136 1.22.2. Варианты использования.......................................................................... 137 1.22.3. Смотрите также.......................................................................................... 138 1.22.4. Материал для дополнительного чтения................................................... 138 1.22.5. Приложение............................................................................................... 138 1.23. Объявления/определения шаблона переменной................................. 140 1.23.1. Описание.................................................................................................... 140
Оглавление 9 1.23.2. Варианты использования.......................................................................... 142 1.23.3. Потенциальные опасности........................................................................ 144 1.23.4. Неудобства.................................................................................................. 146 1.23.5. Смотрите также.......................................................................................... 146 Глава 2. Условно безопасные функциональные возможности................ 147 2.1. Спецификатор alignas............................................................................... 148 2.1.1. Описание...................................................................................................... 148 2.1.2. Варианты использования............................................................................ 151 2.1.3. Потенциальные опасности......................................................................... 154 2.1.4. Смотрите также............................................................................................ 157 2.1.5. Приложение................................................................................................. 157 2.2. Оператор alignof........................................................................................ 161 2.2.1. Описание...................................................................................................... 161 2.2.2. Варианты использования............................................................................ 163 2.2.3. Неудобства................................................................................................... 168 2.2.4. Смотрите также............................................................................................ 169 2.3. Переменные автоматически выводимого типа...................................... 169 2.3.1. Описание...................................................................................................... 169 2.3.2. Варианты использования............................................................................ 173 2.3.3. Потенциальные опасности......................................................................... 176 2.3.4. Неудобства................................................................................................... 182 2.3.5. Смотрите также............................................................................................ 184 2.3.6. Материал для дополнительного чтения.................................................... 184 2.4. Синтаксис инициализации с использованием фигурных скобок: {}.... 184 2.4.1. Описание...................................................................................................... 184 2.4.2. Варианты использования............................................................................ 202 2.4.3. Потенциальные опасности......................................................................... 207 2.4.4. Неудобства................................................................................................... 211 2.4.5. Смотрите также............................................................................................ 218 2.4.6. Материал для дополнительного чтения.................................................... 218 2.5. Функции, вызываемые во время компиляции....................................... 218 2.5.1. Описание...................................................................................................... 219 2.5.2. Варианты использования............................................................................ 242 2.5.3. Потенциальные опасности......................................................................... 250 2.5.4. Неудобства................................................................................................... 254 2.5.5. Смотрите также............................................................................................ 255 2.5.6. Материал для дополнительного чтения.................................................... 255 2.6. Переменные, доступные во время компиляции..................................... 255 2.6.1. Описание...................................................................................................... 255 2.6.2. Варианты использования............................................................................ 260 2.6.3. Потенциальные опасности......................................................................... 265 2.6.4. Неудобства................................................................................................... 265 2.6.5. Смотрите также............................................................................................ 267 2.7. Инициализаторы по умолчанию членов класса/объединения.............. 268 2.7.1. Описание...................................................................................................... 268 2.7.2. Варианты использования............................................................................ 271 2.7.3. Потенциальные опасности.......................................................................... 274 2.7.4. Неудобства.................................................................................................... 276 2.7.5. Смотрите также............................................................................................ 278
10 Оглавление 2.8. Строго типизированные перечисления с областью видимости............ 278 2.8.1. Описание...................................................................................................... 278 2.8.2. Варианты использования............................................................................ 283 2.8.3. Потенциальные опасности......................................................................... 288 2.8.4. Неудобства................................................................................................... 293 2.8.5. Смотрите также............................................................................................ 294 2.8.6. Материал для дополнительного чтения.................................................... 294 2.9. Объявления с созданием экземпляра объекта с явным указанием параметров................................................................................................ 294 2.9.1. Описание...................................................................................................... 294 2.9.2. Варианты использования............................................................................ 304 2.9.3. Потенциальные опасности......................................................................... 308 2.9.4. Неудобства................................................................................................... 310 2.9.5. Смотрите также............................................................................................ 312 2.9.6. Материал для дополнительного чтения.................................................... 312 2.10. Перенаправляющие ссылки (T&&).......................................................... 312 2.10.1. Описание.................................................................................................... 313 2.10.2. Варианты использования.......................................................................... 319 2.10.3. Потенциальные опасности........................................................................ 326 2.10.4. Неудобства.................................................................................................. 329 2.10.5. Смотрите также.......................................................................................... 331 2.10.6. Материал для дополнительного чтения................................................... 331 2.11. Тривиальные типы и типы со стандартной схемой размещения.......... 332 2.11.1. Описание.................................................................................................... 332 2.11.2. Варианты использования.......................................................................... 364 2.11.3. Потенциальные опасности........................................................................ 396 2.11.4. Неудобства.................................................................................................. 431 2.11.5. Смотрите также.......................................................................................... 438 2.11.6. Материал для дополнительного чтения................................................... 438 2.11.7. Приложение................................................................................................ 438 2.12. Наследуемые конструкторы базового класса.......................................... 442 2.12.1. Описание.................................................................................................... 442 2.12.2. Варианты использования.......................................................................... 445 2.12.3. Потенциальные опасности........................................................................ 451 2.12.4. Неудобства.................................................................................................. 453 2.12.5. Смотрите также.......................................................................................... 456 2.13. Списковая инициализация: std::initializer_list<T>................................... 456 2.13.1. Описание.................................................................................................... 456 2.13.2. Варианты использования.......................................................................... 463 2.13.3. Потенциальные опасности........................................................................ 467 2.13.4. Неудобства.................................................................................................. 468 2.13.5. Смотрите также.......................................................................................... 471 2.13.6. Материал для дополнительного чтения................................................... 471 2.13.7. Приложение................................................................................................ 471 2.14. Анонимные объекты-функции (замыкания).......................................... 472 2.14.1. Описание.................................................................................................... 472 2.14.2. Варианты использования.......................................................................... 492 2.14.3. Потенциальные опасности........................................................................ 500 2.14.4. Неудобства.................................................................................................. 503 2.14.5. Смотрите также.......................................................................................... 505