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

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

Эффективный и современный С++: 42 рекомендации по использованию С++ 11 и С++14
Автор: Мейерс Скотт
Переводчик: Красикова И. В.
Дата выхода: 2016
Издательство: Вильямс
Количество страниц: 306
Размер файла: 4,0 МБ
Тип файла: PDF
Добавил: codelibs
 Проверить на вирусы

Об авторе....12

Введение....16

Терминология и соглашения....17

Замечания и предложения....21

От редакции....21

Ждем ваших отзывов!....22

Глава 1. Вывод типов....24

1.1. Вывод типа шаблона....24

1.2. Вывод типа auto....32

1.3. Знакомство с decltype....37

1.4. Как просмотреть выведенные типы....43

Глава 2. Объявление auto....50

2.1. Предпочитайте auto явному объявлению типа....50

2.2. Если auto выводит нежелательный тип, используйте явно типизированный инициализатор....55

Глава 3. Переход к современному C++....62

3.1. Различие между {} и () при создании объектов....62

3.2. Предпочитайте nullptr значениям 0 и NULL....70

3.3. Предпочитайте объявление псевдонимов применению typedef....74

3.4. Предпочитайте перечисления с областью видимости перечислениям без таковой....79

3.5. Предпочитайте удаленные функции закрытым неопределенным....85

3.6. Объявляйте перекрывающие функции как override....89

3.7. Предпочитайте итераторы const_iterator итераторам iterator....96

3.8. Если функции не генерируют исключений, объявляйте их как noexcept....99

3.9. Используйте, где это возможно, constexpr....106

3.10. Делайте константные функции-члены безопасными в смысле потоков....112

3.11. Генерация специальных функций-членов....117

Глава 4. Интеллектуальные указатели....126

4.1. Используйте std::unique_ptr для управления ресурсами путем исключительного владения....127

4.2. Используйте std::shared_ptr для управления ресурсами путем совместного владения....134

4.3. Используйте std::weak_ptr для std::shared_ptr-подобных указателей, которые могут быть висячими....143

4.4. Предпочитайте использование std::make_unique и std::make_shared непосредственному использованию оператора new....147

4.5. При использовании идиомы указателя на реализацию определяйте специальные функции-члены в файле реализации....156

Глава 5. Rvalue-ссылки, семантика перемещений и прямая передача....166

5.1. Азы std::move и std::forward....167

5.2. Отличие универсальных ссылок от rvalue-ссылок....172

5.3. Используйте std::move для rvalue-ссылок, а std::forward — для универсальных ссылок....177

5.4. Избегайте перегрузок для универсальных ссылок....185

5.5. Знакомство с альтернативами перегрузки для универсальных ссылок....191

Отказ от перегрузки....191

Передача const T&....191

Передача по значению....191

Диспетчеризация дескрипторов....192

Ограничения шаблонов, получающих универсальные ссылки....195

Компромиссы....201

5.6. Свертывание ссылок....203

5.7. Считайте, что перемещающие операции отсутствуют, дороги или не используются....209

5.8. Познакомьтесь с случаями некорректной работы прямой передачи....212

Инициализаторы в фигурных скобках....214

0 и NULL в качестве нулевых указателей....215

Целочисленные члены-данные static const и constexpr без определений....215

Имена перегруженных функций и имена шаблонов....217

Битовые поля....218

Резюме....220

Глава 6. Лямбда-выражения....222

6.1. Избегайте режимов захвата по умолчанию....223

6.2. Используйте инициализирующий захват для перемещения объектов в замыкания....230

6.3. Используйте параметры decltype для auto&& для передачи с помощью std::forward....235

6.4. Предпочитайте лямбда-выражения применению std::bind....238

Глава 7. Параллельные вычисления....246

7.1. Предпочитайте программирование на основе задач программированию на основе потоков....246

7.2. Если важна асинхронность, указывайте std::launch::async....250

7.3. Делайте std::thread неподключаемым на всех путях выполнения....255

7.4. Помните о разном поведении деструкторов дескрипторов потоков....261

7.5. Применяйте фьючерсы void для одноразовых сообщений о событиях....266

7.6. Используйте std::atomic для параллельности, volatile — для особой памяти....273

Глава 8. Тонкости....282

8.1. Рассмотрите передачу по значению для копируемых параметров, которые легко перемещаются и всегда копируются....282

8.2. Рассмотрите применение размещения вместо вставки....292

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

В этой книге отражен бесценный опыт ее автора как программиста на C++. Новые возможности этого языка программирования, появившиеся в стандартах C++11 и C++14 — это не просто новые ключевые слова или функции, это появление совершенно новых концепций, так что для их эффективного использования недостаточно просто узнать об их существовании, и программировать на C++11, как на несколько улучшенном и расширенном функционально C++98. Когда происходят такие глобальные изменения в языке программирования, их изучению следует посвятить определенное время, написать сотни, а еще лучше — тысячи строк кода, и столкнуться с массой проблем, кажущихся тем более странными и непонятными, чем большим опытом работы с C++98 вы обладаете. К программированию в полной мере относится фраза Евклида о том, что в геометрии нет царских путей. Но пройти путь изучения и освоения нового языка программирования вам может помочь проводник, показывающий наиболее интересные места и предупреждающий о ямах и ухабах. Таким проводником может послужить книга Скотта Мейерса. С ней вы не заблудитесь и не забредете в дебри, из которых будете долго и трудно выбираться с помощью отладчика. При этом книга не просто научит вас использовать новые возможности языка — она научит использовать их эффективно. Но и это не все — книга не просто учит эффективному применению C++, но еще и рассказывает, почему ту или иную задачу следует решать именно так. Эта книга заставляет вас не просто заучить правила — она заставляет думать. И хотя эта книга в первую очередь предназначена для энтузиастов и профессионалов, она достойна места на полке любого программиста — как профессионала, так и зеленого новичка. Освоение C++11 и C++14 — это больше, чем просто ознакомление с вводимыми этими стандартами возможностями (например, объявлениями типов auto, семантикой перемещения, лямбда-выражениями или поддержкой многопоточности). Вопрос в том, как использовать их эффективно — так, чтобы создаваемые программы были корректны, эффективны и переносимы, а также чтобы их легко можно было сопровождать. Именно этим вопросам и посвящена данная книга, описывающая создание по-настоящему хорошего программного обеспечения с использованием C++11 и C++14 — т.е. с использованием современного C++.


Похожее:

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

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