c++ - tipo - unsigned char c
Consta referencia a un int emitido desde int sin signo (2)
Tengo algunos problemas para entender el comportamiento en este fragmento:
unsigned int i = 2;
const int &r = i;
std::cout << r << "/n";
i = 100;
std::cout << r << "/n";
La primera declaración de impresión da 2 como esperaba, pero cuando cambio el valor de la variable referenciada, no se refleja en la referencia. La segunda declaración impresa también da 2, pero creo que debería dar 100?
Si hago la variable i
en el tipo int
lugar de unsigned int
, funciona como espero. ¿Que esta pasando aqui?
La segunda declaración impresa también da 2, pero creo que debería dar 100?
Porque se crea un int
temporal aquí.
Para const int &r = i;
, i
( unsigned int
) se debe convertir a int
al principio, significa que se creará un int
temporal y luego se vinculará a r
(temporal podría vincularse a la referencia de valor a const), no tiene nada que ver con la variable original i
nunca más.
Si hago la variable i en el tipo int en lugar de int sin signo, funciona como espero.
Debido a que no se necesita conversión y temporal, podría estar vinculado a r
directamente.
Solo puede tener una referencia a un objeto del mismo tipo.
No puede tener una referencia int
a un unsigned int
.
Lo que está pasando aquí es, esencialmente:
const int &r = (int)i;
Se construye un nuevo int
temporal, un nuevo objeto temporal y una referencia const
está vinculada a él.
Usando su depurador, debería poder observar el hecho de que la referencia se refiere a un objeto completamente diferente:
(gdb) n
6 const int &r = i;
(gdb)
7 std::cout << r << "/n";
(gdb) p i
$1 = 2
(gdb) p &i
$2 = (unsigned int *) 0x7fffffffea0c
(gdb) p &r
$3 = (const int *) 0x7fffffffe9fc
(gdb) q