Entenda a ligação estruturada no C ++ 17 por analogia
Estou tentando entender a ligação estruturada introduzida no C ++ 17. A explicação sobrecppreference não é óbvio para mim, mas parece
cv-auto ref-operator [x, y, z] = ...
é aproximadamente equivalente a (para não considerar caso de matriz)
cv-auto ref-operator unique_name = ...
#define x unique_name.member_a
#define y unique_name.member_b
#define z unique_name.member_c
O ponto chave aqui é quex y z
não são variáveis definidas de forma independente, mas apenas aliases dos membros do valor de retorno. Ecv-auto ref-operator
aplica-se ao valor de retorno, não aos aliases (a sintaxe pode ser enganosa aqui). Por exemplo, veja o exemplo 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
E sea b c
são variáveis definidas independentemente, comconst auto&
aplicando a eles,c
não pode ser do tipoconst int
.
Do ponto de vista prático, quais são os pontos principais que essa analogia não conseguiu captar?