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

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

Примечания

  1. 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. Josuttis, 2019, Structured Bindings, p. 3.
  7. Lospinoso, 2019, Alternatives to Exceptions, p. 114.
  8. Lospinoso, 2019, Initialization Statements and if, p. 226, 227.
  9. Gregoire, 2018, The auditVoterRolls Function, p. 659.
  10. Lospinoso, 2019, pair, p. 374.
  11. Gregoire, 2018, Structured Bindings, p. 717.

Источники

  • 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.
This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.