Лучшие вопросы
Таймлайн
Чат
Перспективы
Структурное связывание
Из Википедии, свободной энциклопедии
Remove ads
Структурное связывание (англ. structured binding) — синтаксическое нововведение стандарта языка программирования C++17[1], предназначенное для распаковки сложных нестатических типов данных и представления их в виде композиции своих составляющих элементов[2][3].
Синтаксис
Суммиров вкратце
Перспектива
Структурное связывание является одним из новых вариантов объявления переменных в языке программирования C++[4]. Оно определяет отношение объявляемых переменных с доступными компонентами сложного объекта, который выступает их инициализатором[5]:
optional_attribute qualified_auto optional_reference [ identifier_list ] = expression; // объявление в виде структурного связывания
optional_attribute qualified_auto optional_reference [ identifier_list ] = {expression}; // структурное связывание с инициализацией кортежа
optional_attribute qualified_auto optional_reference [ identifier_list ] = (expression); // структурное связывание для неполного типа
- где:
optional_attribute
— последовательность необязательных атрибутов,qualified_auto
— ключевое словоauto
с уточнением в виде спецификаторовconst
,volatile
и т. п.optional_reference
— необязательный оператор доступа по ссылке&
или&&
,identifier_list
— список объявляемых переменных, разделённых запятыми,expression
— инициализирующее выражение, которое не может быть объединением.
В некотором смысле использование структурного связывания осуществляет декомпозицию инициализатора на его составляющие компоненты[6]. Как следствие, количество переменных, объявляемых с помощью структурного связывания, должно совпадать с числом элементов инициализатора[1].
Remove ads
Описание
Структурное связывание даёт возможность доступа к публичным полям составного объекта, например, после вызова функции, которая возвращает сложный тип данных. Во многих случаях структурное связывание может рассматриваться как удобная альтернатива генерированию исключений[7].
Для улучшения читаемости кода инициализатор со структурным связыванием не возбраняется использовать в заголовочной части операторов if
или for
, где расположена проверка условия[8][9].
Структурное связывание хорошо взаимодействует со стандартными встроенными классами библиотеки STL, например с pair
[10] или с tuple
[11].
Remove ads
Примечания
Источники
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads