Скотт Мейерс "Эффективный и современный С++: 42 рекомендации по использованию C++11 и C++14"

Руководство по использованию.

Скотт Мейерс «Эффективный и современный С++: 42 рекомендации по использованию C++11 и C++14» Вильямс, 2016 год, 304 стр. (12,8 мб. pdf)

Эта книга посвящена вопросам использования C++11 и C++14, т.е современных версий языка C++. Автор книги научит вас эффективно использовать новые возможности языка программирования в своих разработках. В книге нет описания базовых функций C++, подобную информацию можно найти в учебниках. А в этом руководстве приводятся рекомендации именно по эффективному их применению в C++11 и C++14. Вся информация сгруппирована в разделы по тем или иным функциональным особенностям рассматриваемых выражений и рекомендациями по их использованию. Книга послужит прекрасным инструментом в повышении вашего уровня программирования. Рассчитана на подготовленного читателя.
ISBN: 978-5-8459-2000-3, 978-1-49-190399-5

Оглавление книги
Глава 1. Вывод типов 23
1.1. Вывод типа шаблона 23
1.2. Вывод типа auto 31
1.3. Знакомство с decltype 36
1.4. Как просмотреть выведенные типы 42

Глава 2. Объявление auto 49
2.1. Предпочитайте auto явному объявлению типа 49
2.2. Если auto выводит нежелательный тип, используйте явно типизированный инициализатор 54

Глава 3. Переход к современному C++ 61
3.1. Различие между (} и () при создании объектов 61
3.2. Предпочитайте nullptr значениям 0 и NULL 69
3.3. Предпочитайте объявление псевдонимов применению typedef 73
3.4. Предпочитайте перечисления с областью видимости перечислениям без таковой 78
3.5. Предпочитайте удаленные функции закрытым неопределенным 84
3.6. Объявляйте перекрывающие функции как override 88
3.7. Предпочитайте итераторы const iterator итераторам iterator 95
3.8. Если функции не генерируют исключений, объявляйте их как noexcept 98
3.9. Используйте, где это возможно, constexpr 105
3.10. Делайте константные функции-члены безопасными в смысле потоков 111
3.11. Генерация специальных функций-членов 116

Глава 4. Интеллектуальные указатели 125
4.1. Используйте std: :unique_ptr для управления ресурсами путем исключительного владения 126
4.2. Используйте std: : shared ptr для управления ресурсами путем совместного владения 133
4.3. Используйте std: : weak ptr для std: : shared_ptr-noflo6Hbix указателей, которые могут быть висячими 142
4.4. Предпочитайте использование std: :make_unique и std: :make_shared непосредственному использованию оператора new 146
4.5. При использовании идиомы указателя на реализацию определяйте специальные функции-члены в файле реализации 155

Глава 5. Rvalue-ссылки, семантика перемещений и прямая передача 165
5.1. Азы std: :move и std: : forward 166
5.2. Отличие универсальных ссылок от rvalue-ссылок 171
5.3. Используйте std: :move для rvalue-ссылок, a std: : forward — для универсальных ссылок 176
5.4. Избегайте перегрузок для универсальных ссылок 184
5.5. Знакомство с альтернативами перегрузки для универсальных ссылок 190
Отказ от перегрузки 190
Передача const Т & 190
Передача по значению 190
Диспетчеризация дескрипторов 191
Ограничения шаблонов, получающих универсальные ссылки 194
Компромиссы 200
5.6. Свертывание ссылок 202
5.7. Считайте, что перемещающие операции отсутствуют, дороги или не используются 208
5.8. Познакомьтесь с случаями некорректной работы прямой передачи 211
Инициализаторы в фигурных скобках 213
0 и NULL в качестве нулевых указателей 214
Целочисленные члены-данные static const и constexpr без определений 214
Имена перегруженных функций и имена шаблонов 216
Битовые поля 217
Резюме 219

Глава 6. Лямбда-выражения 221
6.1. Избегайте режимов захвата по умолчанию 222
6.2. Используйте инициализирующий захват для перемещения объектов в замыкания 229
6.3. Используйте параметры decltype для autoii для передачи с помощью std:: forward
6.4. Предпочитайте лямбда-выражения применению std: :bind 234
237
Глава 7. Параллельные вычисления 245
7.1. Предпочитайте программирование на основе задач
программированию на основе потоков 245
7.2. Если важна асинхронность, указывайте std:: launch: :async 249
7.3. Делайте std:: thread не подключаемым на всех путях выполнения 254
7.4. Помните о разном поведении деструкторов дескрипторов потоков 260
7.5. Применяйте фьючерсы void для одноразовых сообщений о событиях 265
7.6. Используйте std:: atomic для параллельности, volat i le — для особой памяти 272

Глава 8. Тонкости 281
8.1. Рассмотрите передачу по значению для копируемых параметров, которые легко перемещаются и всегда копируются 281
8.2. Рассмотрите применение размещения вместо вставки 291
Предметный указатель 301

Скачать книгу бесплатно12,8 мб. pdf

Похожая литература