УДК 004.438
ББК 32.973.26-018.2
М97
М97
Мейерс, Скотт.
Наиболее эффективное использование С++. 35 новых рекомендаций по
улучшению ваших программ и проектов / С. Мейерс ; пер. с англ. Р. В. Павлова.
— 2-е изд., эл. — 1 файл pdf : 298 с. — Москва : ДМК Пресс, 2023. —
(Для программистов). — Систем. требования: Adobe Reader XI либо Adobe
Digital Editions 4.5 ; экран 10". — Текст : электронный.
ISBN 978-5-89818-563-3
Автор книги «Наиболее эффективное использование C++» предлагает 35 новых
способов улучшения ваших программ. Основываясь на своем многолетнем опыте,
С. Мейерс объясняет, как писать наиболее эффективные программы: надежные, совместимые,
переносимые и пригодные для повторного использования, то есть программы,
безупречные во всех отношениях.
Настоящая книга описывает приемы, которые позволяют значительно повысить
производительность программ, выбрав оптимальное соотношение затрат времени/
памяти на различные операции. Здесь вы найдете примеры обработки исключений
и анализ их влияния на структуру и поведение классов и функций C++, а также
варианты практического применения новых возможностей языка, таких как тип bool,
ключевые слова mutable и explicit, пространства имен, шаблоны функций членов,
стандартная библиотека шаблонов и многое другое.
УДК 004.438
ББК 32.973.26-018.2
Электронное издание на основе печатного издания: Наиболее эффективное использование
С++. 35 новых рекомендаций по улучшению ваших программ и проектов / С. Мейерс ; пер. с
англ. Р. В. Павлова. — Москва : ДМК Пресс, 2016. — 298 с. — (Для программистов). — ISBN
978-5-97060-193-8. — Текст : непосредственный.
Все права защищены. Любая часть этой книги не может быть воспроизведена в какой бы то ни было
форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав.
Материал, изложенный в данной книге, многократно проверен. Но поскольку вероятность технических
ошибок все равно существует, издательство не может гарантировать абсолютную точность и правильность
приводимых сведений. В связи с этим издательство не несет ответственности за возможные ошибки, связанные
с использованием книги.
В соответствии со ст. 1299 и 1301 ГК РФ при устранении ограничений, установленных техническими средствами
защиты авторских прав, правообладатель вправе требовать от нарушителя возмещения убытков или выплаты компенсации.
ISBN
978-5-89818-563-3
© Pearson Education, Inc
© Перевод на русский язык, оформление,
издание, ДМК Пресс, 2016
Стр.5
Содержание
Благодарности ............................................................................................ 9
Источники идей ........................................................................................... 9
Об этой книге ............................................................................................ 11
Люди, которые мне помогали .................................................................... 13
Введение .......................................................................................................... 14
Глава 1. Основы ............................................................................................. 23
Правило 1. Различайте указатели и ссылки ............................................... 23
Правило 2. Предпочитайте приведение типов в стиле С++ ........................ 25
Правило 3. Никогда не используйте полиморфизм в массивах .................. 30
Правило 4. Избегайте неоправданного использования конструкторов
по умолчанию ............................................................................................ 33
Глава 2. Операторы ...................................................................................... 38
Правило 5. Опасайтесь определяемых пользователем функций
преобразования типа ................................................................................ 38
Правило 6. Различайте префиксную и постфиксную формы операторов
инкремента и декремента ......................................................................... 45
Правило 7. Никогда не перегружайте операторы &&, || и ,......................... 48
Правило 8. Различайте значение операторов new и delete ......................... 51
Глава 3. Исключения .................................................................................... 57
Правило 9. Чтобы избежать утечки ресурсов, используйте
деструкторы .............................................................................................. 58
Правило 10. Не допускайте утечки ресурсов в конструкторах .................... 63
Правило 11. Не распространяйте обработку исключений за пределы
деструктора .............................................................................................. 71
Правило 12. Отличайте генерацию исключения от передачи
параметра или вызова виртуальной функции ............................................ 73
Правило 13. Перехватывайте исключения, передаваемые по ссылке ........ 80
Правило 14. Разумно используйте спецификации исключений .................. 84
Правило 15. Оценивайте затраты на обработку исключений ...................... 90
Стр.7
Содержание
7
Глава 4. Эффективность ............................................................................ 94
Правило 16. Не забывайте о правиле «80–20» ........................................... 95
Правило 17. Используйте отложенные вычисления ................................... 97
Правило 18. Снижайте затраты на ожидаемые вычисления ..................... 106
Правило 19. Изучите причины возникновения временных объектов ........ 110
Правило 20. Облегчайте оптимизацию возвращаемого значения ............ 113
Правило 21. Используйте перегрузку, чтобы избежать неявного
преобразования типов ............................................................................ 116
Правило 22. По возможности применяйте оператор присваивания
вместо отдельного оператора ................................................................. 118
Правило 23. Используйте разные библиотеки ......................................... 121
Правило 24. Учитывайте затраты, связанные с виртуальными
функциями, множественным наследованием, виртуальными
базовыми классами и RTTI ...................................................................... 124
Глава 5. Приемы ...........................................................................................134
Правило 25. Делайте виртуальными конструкторы и функции,
не являющиеся членами класса............................................................... 134
Правило 26. Ограничивайте число объектов в классе .............................. 140
Правило 27. В зависимости от ситуации требуйте или запрещайте
размещать объекты в куче ....................................................................... 154
Правило 28. Используйте интеллектуальные указатели ........................... 167
Правило 29. Используйте подсчет ссылок ............................................... 190
Правило 30. Применяйте proxy-классы .................................................... 218
Правило 31. Создавайте функции, виртуальные по отношению
более чем к одному объекту .................................................................... 231
Глава 6. Разное ..............................................................................................254
Правило 32. Программируйте, заглядывая в будущее ............................. 254
Правило 33. Делайте нетерминальные классы абстрактными ................. 259
Правило 34. Умейте использовать в одной программе С и С++................ 270
Правило 35. Ознакомьтесь со стандартом языка ..................................... 276
Приложение 1. Список рекомендуемой
литературы .....................................................................................................284
Приложение 2. Реализация шаблона auto_ptr .................................289
Алфавитный указатель ..............................................................................293
Стр.8