Comprender la unión estructurada en C ++ 17 por analogía
Estoy tratando de entender el enlace estructurado introducido en C ++ 17. La explicación sobrecppreference no es obvio para mí, pero parece
cv-auto ref-operator [x, y, z] = ...
es más o menos equivalente a (sin considerar el caso de la 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
El punto clave aquí es quex y z
no son variables definidas independientemente, sino solo alias de los miembros del valor de retorno. Ycv-auto ref-operator
se aplica al valor de retorno, no a los alias (la sintaxis puede ser engañosa aquí). Por ejemplo, vea el ejemplo de 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
Sia b c
son variables definidas independientemente, conconst auto&
aplicando a ellos,c
no puede ser de tipoconst int
.
Desde un punto de vista práctico, ¿cuáles son los puntos clave que esta analogía no pudo captar?