tipos tipo tabla sirve rangos que para long flotante datos dato c++ reference const const-reference

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?

Ejemplo vivo


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