Лучшие вопросы
Таймлайн
Чат
Перспективы

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

Из Википедии, свободной энциклопедии

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

Примечания

Источники

Loading related searches...

Wikiwand - on

Seamless Wikipedia browsing. On steroids.

Remove ads