Структурное связывание: различия между версиями

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
Содержимое удалено Содержимое добавлено
Новая страница: «'''Структурное связывание''' ({{lang-en|Structured binding}}) — синтаксическое но...»
(нет различий)

Версия от 10:58, 15 сентября 2020

Структурное связывание (англ. 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 — инициализирующее выражение, которое не может быть объединением.

Количество переменных, объявляемых с помощью структурного связывания, должно совпадать с числом элементов инициализатора[1].

Описание

Структурное связывание даёт возможность доступа к публичным полям составного объекта, например после вызова функции, которая возвращает сложный тип данных. Во многих случаях структурное связывание может рассматриваться как удобная альтернатива генерированию исключений[6].

Для улучшения читаемости кода инициализатор со структурным связыванием не возбраняется использовать в заголовочной части операторов if или for, где расположена проверка условия[7][8].

Структурное связывание хорошо взаимодействует со стандартными встроенными классами библиотеки STL, например с pair[9] или с tuple[10].

Примечания

  1. 1 2 Gregoire, 2018, Structured Bindings, p. 26.
  2. Lospinoso, 2019, Structured Bindings, p. 222.
  3. Olsson, 2018, Returning Multiple Values, p. 64.
  4. Lospinoso, 2019, Declaration Statements, p. 213.
  5. Structured binding declaration (since C++17) en.cppreference.com
  6. Lospinoso, 2019, Alternatives to Exceptions, p. 114.
  7. Lospinoso, 2019, Initialization Statements and if, p. 226, 227.
  8. Gregoire, 2018, The auditVoterRolls Function, p. 659.
  9. Lospinoso, 2019, pair, p. 374.
  10. Gregoire, 2018, Structured Bindings, p. 717.

Источники