Код в тексте, имена баз данных, каталогов и файлов, а также расширения файлов, пути к файлам, ненастоящие (dummy) URL, пользовательский ввод и имена пользователей Twitter выделяются так: «Следующий шаг — редактирование файла build.properties
».
Блок кода выглядит следующим образом:
my_wrapper
{
return {t1, t2, t3};
}
Загрузка примеров кода
Файлы с примерами кода для книги можно скачать по адресу https://github.com/PacktPublishing/Cpp17-STL-Cookbook. Для этого выполните следующие шаги.
1. Перейдите по указанному выше адресу.
2. Нажмите кнопку Clone or Download (Клонировать или скачать).
3. На открывшейся панели выберите ссылку Download ZIP (Скачать Zip).
После загрузки файла убедитесь, что распаковали или извлекли каталог с помощью последней версии одной из следующих программ:
□ WinRAR/7-Zip для Windows;
□ Zipeg/iZip/UnRarX для Mac;
□ 7-Zip/PeaZip для Linux.
Мы предлагаем и другие пакеты с кодом из нашего обширного каталога книг и видеороликов, доступного на https://github.com/PacktPublishing/. Обратите на них внимание!
Глава 1
Новые возможности С++17
В этой главе:
□ применение структурированных привязок (декомпозиции) для распаковки набора возвращаемых значений;
□ ограничение области видимости переменных в выражениях if
и switch
;
□ новые правила инициализатора с фигурными скобками;
□ разрешение конструктору автоматически вывести полученный тип класса шаблона;
□ упрощение принятия решений во время компиляции с помощью constexpr-if
;
□ подключение библиотек, перечисленных в заголовочных файлах, с использованием встраиваемых переменных;
□ реализация вспомогательных функций с помощью выражений свертки.
Введение
Функциональность языка C++ значительно расширилась с выходом C++11, C++14 и недавней версии C++17. На текущий момент он совсем не похож на себя образца десятилетней давности. Стандарт С++ упорядочивает не только язык, но и STL.
В этой книге на большом количестве примеров показаны наилучшие способы использования возможностей STL. Но для начала в текущей главе мы сконцентрируемся на самых важных особенностях языка. Изучив их, вы сможете писать легко читаемый, удобный в сопровождении и выразительный код.
Мы рассмотрим, как получить доступ к отдельным элементам пар, кортежей и структур с помощью структурированных привязок и ограничить область видимости переменных благодаря новым возможностям по инициализации переменных внутри выражений if
и switch
. Синтаксические двусмысленности, появившиеся в C++11 из-за нового синтаксиса инициализатора с фигурными скобками, который выглядит так же, как синтаксис списков инициализаторов, были исправлены constexpr-if
. Обработка переменного количества параметров в шаблонных функциях значительно упростилась благодаря новым
Отдельные примеры данной главы могут оказаться более интересными для тех, кто реализует библиотеки, нежели для тех, кто пишет приложения. Для полноты картины мы рассмотрим несколько свойств, но вам не обязательно разбираться со всеми примерами главы прямо сейчас, чтобы понять остальной материал этой книги.
Применяем структурированные привязки (декомпозицию) для распаковки набора возвращаемых значений
В C++17 появилась новая возможность, объединяющая синтаксический сахар и автоматическое определение типа, — структурированные привязки. Эта функция помогает присваивать отдельные значения пар, кортежей и структур отдельным переменным. В других языках программирования этот механизм называется распаковкой.
Как это делается
Применение декомпозиции для присвоения значений нескольким переменным на основе одной упакованной структуры всегда выполняется за один шаг. Сначала рассмотрим, как это делалось до появления С++17. Затем взглянем на несколько примеров, в которых показаны способы воплощения этого в С++17.