Стандарт С++ 17 представляет новую функцию структурированные привязки, которая изначально была предложенный в 2015 году, и синтаксическое появление которого в дальнейшем обсуждалось .
Некоторые из них для них приходят на ум, как только вы просматриваете документацию.
Разложение агрегатов
Объявите кортеж:
std::tuple<int, std::string> t(42, "foo");
Именованные элементарные копии могут быть легко получены с помощью структурированных привязок в одной строке:
auto [i, s] = t;
что эквивалентно:
auto i = std::get<0>(t);
auto s = std::get<1>(t);
или
int i;
std::string s;
std::tie(i, s) = t;
Ссылки на элементы кортежа также могут быть получены безболезненно:
auto& [ir, sr] = t;
const auto& [icr, scr] = t;
Итак, мы можем делать с массивами или структурами/классами, все члены которых являются общедоступными.
Множественные возвращаемые значения
Удобный способ получить несколько возвращаемых значений из функции сразу следует из приведенного выше.
Что еще?
Можете ли вы предоставить некоторые другие, возможно, менее очевидные варианты использования структурированных привязок? Как еще они могут улучшить читаемость или даже производительность кода на С++?
Примечания
Как отмечалось в комментариях, в текущей реализации структурированных привязок отсутствуют некоторые функции. Они непеременные и их синтаксис не позволяет явно пропустить агрегированные элементы. Здесь можно найти дискуссию о вариативности.