Suponiendo n2
es de algún tipo incorporado, el elenco de int &
tipo realiza la reinterpretación de lvalue n1
(cualquiera que sea el tipo que tenía) como un valor-I de tipo int
.
En el contexto de int n2 = (int &) n1
declaración, si n1
es por sí misma un valor-I de tipo int
, el elenco es superfluo, cambia absolutamente nada. Si n1
es un valor l de tipo const int
, entonces el molde simplemente descarta la constness, que también es superfluo en el contexto anterior. Si n1
es un valor izquierdo de algún otro tipo, el elenco simplemente reinterpreta memoria ocupada por n1
como un objeto de tipo int
(esto se llama tipo de juegos de palabras). Si n1
no es un valor l, el código está mal formado.
Por lo tanto, en el código como int n2 = (int&) n1
el elenco de int &
sólo no redundante (tiene algún efecto real) cuando no escriba juego de palabras, es decir, cuando n1
es un valor izquierdo de algún otro tipo (no int
). Por ejemplo
float n1 = 5.0;
int n2 = (int &) n1;
lo que equivaldría a
int n2 = *(int *) &n1;
y para
int n2 = *reinterpret_cast<int *>(&n1);
hace falta decir que esta es una práctica bastante mala programación.
Esto es, por cierto, uno de los casos cuando se usa un molde de estilo C++ dedicado es muy preferido. Si el autor del código usó reinterpret_cast
en lugar del estilo C, probablemente no tenga que hacer esta pregunta.
Por supuesto, si n1
es del tipo int
, no hay una explicación significativa para este elenco. En ese caso, es, de nuevo, completamente superfluo.
P.S. También existe la posibilidad de que n2
sea una clase con operador de conversión sobrecargado al tipo int &
, que es una historia totalmente diferente ... De todos modos, debe decir qué n2
es cuando hace preguntas como esa.
Mi C++ está oxidado, pero creo que un * se puede usar para asignar un int o tener una serie de entradas. Sin embargo, no sé qué significaría & en este caso. –
¿Cuál es el tipo de n1? –
"modificar n1 no refleja n1" ?? –