RUSSIAN

Красивый C++: 30 главных правил чистого, безопасного и быстрого кода

Book information

Publisher
Питер
Year
2023
ISBN
9785446122721
Language
russian
Format
PDF
Filesize
5 MB (5423238 bytes)
Series
Для профессионалов
Edition
1
Pages
368\368
Time added
2023-04-07 10:17:03

Description

Написание качественного кода на C++ не должно быть трудной задачей. Если разработчик будет следовать рекомендациям, приведенным в C++ Core Guidelines, то он будет писать исключительно надежные, эффективные и прекрасно работающие программы на C++. Но руководство настолько переполнено советами, что порой трудно понять, с чего начать. Начните с «Красивого C++»! Опытные программисты Гай Дэвидсон и Кейт Грегори выбрали 30 основных рекомендаций, которые посчитали особенно ценными, и дают подробные практические советы, которые помогут улучшить ваш стиль разработки на C++. Для удобства книга структурирована в точном соответствии с официальным веб-сайтом C++ Core Guidelines. Избранные рекомендации по C++ Предисловие Вступление О книге Доступность кода примеров Благодарности Об авторах От издательства Часть I. Bikeshedding — это плохо Глава 1.1. P.2. Придерживайтесь стандарта ISO C++ Что такое стандарт ISO C++ История С++ Инкапсуляция вариаций Вариации в окружении времени выполнения Вариации на уровне языка C++ и компилятора Расширения для С++ Защита заголовочных файлов Вариации в основных типах Нормативные ограничения Изучение старых способов Обратная совместимость в C++ Прямая совместимость и Y2K Следите за последними изменениями в стандарте IsoCpp Конференции Другие источники Глава 1.2. F.51. Если есть выбор, используйте аргументы по умолчанию вместо перегрузки Введение Доработка ваших абстракций: дополнительные аргументы или перегрузка? Тонкости разрешения перегрузки Вернемся к примеру Однозначная природа аргументов по умолчанию Альтернативы перегрузке Иногда без перегрузки не обойтись Подведем итог Глава 1.3. C.45. Не определяйте конструктор по умолчанию, который просто инициализирует переменные-члены; для этой цели лучше использовать внутриклассовые инициализаторы членов Зачем нужны конструкторы по умолчанию Как инициализируются переменные-члены Что может случиться, если поддерживать класс будут два человека? Сборная солянка из конструкторов Аргументы по умолчанию могут запутать ситуацию в перегруженных функциях. Подведем итог Глава 1.4. C.131. Избегайте тривиальных геттеров и сеттеров Архаичная идиома Абстракции Простая инкапсуляция Инварианты класса Существительные и глаголы Подведем итог Глава 1.5. ES.10. Объявляйте имена по одному в каждом объявлении Позвольте представить Обратная совместимость Пишите более ясные объявления Структурное связывание Подведем итог Глава 1.6. NR.2. Функции необязательно должны иметь только один оператор возврата Правила меняются Гарантия очистки Идиома RAII Пишите хорошие функции Подведем итог Часть II. Не навредите себе Глава 2.1. P.11. Инкапсулируйте беспорядочные конструкции, а не разбрасывайте их по всему коду Все одним глотком Что означает инкапсулировать запутанную конструкцию Назначение языка и природа абстракции Уровни абстракции Абстракция путем рефакторинга и проведения линии Подведем итог Глава 2.2. I.23. Минимизируйте число параметров в функциях Сколько они должны получать? Упрощение через абстрагирование Делайте так мало, как возможно, но не меньше Примеры из реальной жизни Подведем итог Глава 2.3. I.26. Если нужен кросс-компилируемый ABI, используйте подмножество в стиле C Создавайте библиотеки Что такое ABI Сокращайте до абсолютного минимума Распространение исключений Подведем итог Глава 2.4. C.47. Определяйте и инициализируйте переменные-члены в порядке их объявления Подведем итог Глава 2.5. CP.3. Сведите к минимуму явное совместное использование записываемых данных Традиционная модель выполнения Подождите, это еще не все Предотвращение взаимоблокировок и гонок за данными Отказ от блокировок и мьютексов Подведем итог Глава 2.6. Т.120. Используйте метапрограммирование шаблонов, только когда это действительно необходимо std::enable_if => requires Подведем итог Часть III. Прекратите использовать это Глава 3.1. I.11. Никогда не передавайте владение через необработанный (простой) указатель (T*) или ссылку (T&) Использование области свободной памяти Производительность интеллектуальных указателей Использование простой семантики ссылок gsl::owner Подведем итог Глава 3.2. I.3. Избегайте синглтонов Глобальные объекты — это плохо Шаблон проектирования «Синглтон» Фиаско порядка статической инициализации Как скрыть синглтон Только один из них должен существовать в каждый момент работы кода Подождите минутку... Подведем итог Глава 3.3. C.90. Полагайтесь на конструкторы и операторы присваивания вместо memset и memcpy В погоне за максимальной производительностью Ужасные накладные расходы конструкторов Самый простой класс О чем говорит стандарт? А как же memcpy? Никогда не позволяйте себе недооценивать компилятор Подведем итог Глава 3.4. ES.50. Не приводите переменные с квалификатором const к неконстантному типу Работа с большим количеством данных Брандмауэр const Реализация двойного интерфейса Кэширование и отложенные вычисления Два вида const Сюрпризы const Подведем итог Глава 3.5. E.28. При обработке ошибок избегайте глобальных состояний (например, errno) Обрабатывать ошибки сложно Язык C и errno Коды возврата Исключения Boost.Outcome Почему обрабатывать ошибки так сложно? Свет в конце туннеля Подведем итог Глава 3.6. SF.7. Не используйте using namespace в глобальной области видимости в заголовочном файле Не делайте этого Неоднозначность Использование using Куда попадают символы? Еще более коварная проблема Решение проблемы операторов разрешения области видимости Искушение и расплата Подведем итог Часть IV. Используйте эту новую особенность правильно Глава 4.1. F.21. Для возврата нескольких «выходных» значений используйте структуры или кортежи Форма сигнатуры функции Документирование и аннотирование Теперь можно вернуть объект Также можно вернуть кортеж Передача и возврат по неконстантной ссылке Подведем итог Глава 4.2. Enum.3. Старайтесь использовать классы-перечисления вместо «простых» перечислений Константы Перечисления с заданной областью видимости Базовый тип Неявное преобразование Подведем итог Глава 4.3. ES.5. Минимизируйте области видимости Природа области видимости Область видимости блока Область видимости пространства имен Область видимости класса Область видимости параметров функции Область видимости перечисления Область действия параметра шаблона Область видимости как контекст Подведем итог Глава 4.4. Con.5. Используйте constexpr для определения значений, которые можно вычислить на этапе компиляции От const к constexpr С++ по умолчанию Использование constexpr inline consteval constinit Подведем итог Глава 4.5. T.1. Используйте шаблоны для повышения уровня абстрактности кода Повышение уровня абстракции Шаблоны функций и абстракция Шаблоны классов и абстракция Выбор имени — сложная задача Подведем итог Глава 4.6. T.10. Задавайте концепции для всех аргументов шаблона Как мы здесь оказались? Ограничение параметров Как абстрагировать свои концепции Разложение на составляющие через концепции Подведем итог Часть V. Пишите хороший код по умолчанию Глава 5.1. P.4. В идеале программа должна быть статически типобезопасной Безопасность типов — это средство защиты в C++ Объединения Приведение Целые без знака Буферы и размеры Подведем итог Глава 5.2. P.10. Неизменяемые данные предпочтительнее изменяемых Неправильные значения по умолчанию const в объявлениях функций Подведем итог Глава 5.3. I.30. Инкапсулируйте нарушения правил Сокрытие неприглядных вещей Поддержание видимости, что все в порядке Подведем итог Глава 5.4. ES.22. Не объявляйте переменные, пока не получите значения для их инициализации Важность выражений и операторов Объявление в стиле C Объявление с последующей инициализацией Максимальное откладывание объявления Локализация контекстно-зависимой функциональности Устранение состояния Подведем итог Глава 5.5. Per.7. При проектировании учитывайте возможность последующей оптимизации Максимальная частота кадров Работа вдалеке от железа Оптимизация через абстракцию Подведем итог Глава 5.6. E.6. Используйте идиому RAII для предотвращения утечек памяти Детерминированное уничтожение Утечка файлов Почему это так важно? Все это выглядит чересчур сложным: будущие возможности Где все это получить? Заключение Послесловие

Similar books

Методология научных исследований и прикладной аналитики: Учебник. Изд. 5-е, дополн. и перераб. В 2 т. Т.2: Научные исследования: Мастерство и искусство научного мышления и научной работы / Methodology of Scientific Research and Practical Analytics: A Textbook: Fifth Edition. In two volumes. Vol.2: Scientific research: Art of scientific thinking and scientific work / Méthodologie de la recherche scientifique et de l’analytique appliquée: Manuel: Cinquième édition. En 2 tomes. T.2: Recherches scientifiques: Art de la pensée scientifique et du travail scientifique

Методология научных исследований и прикладной аналитики: Учебник. Изд. 5-е, дополн. и перераб. В 2 т. Т.2: Научные исследования: Мастерство и искусство научного мышления и научной работы / Methodology of Scientific Research and Practical Analytics: A Textbook: Fifth Edition. In two volumes. Vol.2: Scientific research: Art of scientific thinking and scientific work / Méthodologie de la recherche scientifique et de l’analytique appliquée: Manuel: Cinquième édition. En 2 tomes. T.2: Recherches scientifiques: Art de la pensée scientifique et du travail scientifique

2025 · PDF

Методы и понятия философии искусства: практикум : уровень подготовки кадров высшей квалификации: ассиснтурв-стажировка : специальности: 54.09.03 "Искусство дизайна (по видам)", 54.09.02 "Мастерство декоративно-прикладного искусства и народных промыслов (по видам)" : укрупненная группа специальностей: 54.00.00 "Изобразительное и прикладные виды искусств" : квалификация выпускника: "Преподаватель творческих дисциплин в высшей школе. Дизайнер", "Преподаватель творческих дисциплин в высшей школе. Художник декоративно-прикладного искусства" : форма обучения: очная

Методы и понятия философии искусства: практикум : уровень подготовки кадров высшей квалификации: ассиснтурв-стажировка : специальности: 54.09.03 "Искусство дизайна (по видам)", 54.09.02 "Мастерство декоративно-прикладного искусства и народных промыслов (по видам)" : укрупненная группа специальностей: 54.00.00 "Изобразительное и прикладные виды искусств" : квалификация выпускника: "Преподаватель творческих дисциплин в высшей школе. Дизайнер", "Преподаватель творческих дисциплин в высшей школе. Художник декоративно-прикладного искусства" : форма обучения: очная

2022 · PDF

Разработка графического интерфейса пользователя информационной системы с использованием библиотеки QT: учебное пособие для студентов 1 курса направлений подготовки 09.04.02 "Информационные системы и технологии", 27.04.03 "Системный анализ и управление" очной формы обучения, 2 курса направления подготовки 10.05.03 "Информационная безопасность автоматизированных систем" очной формы обучения и 3 курса направления подготовки 09.03.02 "Информационные системы и технологии" очной и заочной форм обучения : учебное электронное издание

Разработка графического интерфейса пользователя информационной системы с использованием библиотеки QT: учебное пособие для студентов 1 курса направлений подготовки 09.04.02 "Информационные системы и технологии", 27.04.03 "Системный анализ и управление" очной формы обучения, 2 курса направления подготовки 10.05.03 "Информационная безопасность автоматизированных систем" очной формы обучения и 3 курса направления подготовки 09.03.02 "Информационные системы и технологии" очной и заочной форм обучения : учебное электронное издание

2021 · PDF