Хорошая перспектива!
аюсь понять структурированные привязки, представленные в C ++ 17. Объяснение поcppreference для меня не очевидно, но похоже
cv-auto ref-operator [x, y, z] = ...
примерно эквивалентно (не учитывать случай массива)
cv-auto ref-operator unique_name = ...
#define x unique_name.member_a
#define y unique_name.member_b
#define z unique_name.member_c
Ключевым моментом здесь является то, чтоx y z
не являются независимо определенными переменными, а просто псевдонимами членов возвращаемого значения. А такжеcv-auto ref-operator
применяется к возвращаемому значению, а не к псевдонимам (здесь синтаксис может вводить в заблуждение). Например, см. Пример cppreference
float x{};
char y{};
int z{};
std::tuple<float&,char&&,int> tpl(x,std::move(y),z);
const auto& [a,b,c] = tpl;
// a names a structured binding of type float& that refers to x
// b names a structured binding of type char&& that refers to y
// c names a structured binding of type const int that refers to the 3rd element of tpl
Еслиa b c
независимо определенные переменные, сconst auto&
обращаясь к ним,c
не может быть типаconst int
.
С практической точки зрения, какие ключевые моменты эта аналогия не уловила?