Структурное связывание

Структурное связывание (англ. 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].

Описание

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

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

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

Примечания

Источники

  • Marc Gregoire. Professional C++ : [англ.]. — Fourth Edition. — John Wiley & Sons, 2018. — ISBN 978-1-119-42130-6.
  • Nicolai M. Josuttis. C++17 : The Complete Guide : [англ.]. — 2019. — ISBN 9783967307177.
  • John Lospinoso. C++ Crash Course : A Fast-Paced Introduction : [англ.]. — San Francisco : no starch press, 2019. — ISBN 978-1-59327-888-5.
  • Mikael Olsson. C++17 Quick Syntax Reference : A Pocket Guide to the Language, APIs and Library : [англ.]. — Third Edition. — Apress, 2018. — ISBN 978-1-4842-3599-7. — doi:10.1007/978-1-4842-3600-0.