我在理解此代码段中的行为时遇到了一些麻烦:
unsigned int i = 2;
const int &r = i;
std::cout << r << "\n";
i = 100;
std::cout << r << "\n";
第一个打印语句按预期提供2,但是当我更改引用变量的值时,它不会反映在引用中。第二个打印语句也给出2,但我认为应该给出100?
如果我将变量设置i
为typeint
而不是unsigned int
,它将按预期工作。这里发生了什么?
您只能引用相同类型的对象。
您不能int
引用unsigned int
。
本质上,这里发生的是:
const int &r = (int)i;
一个新的int
临时被构造一个新的临时对象和const
引用绑定到它。
使用调试器,您应该能够观察到引用引用了一个完全不同的对象的事实:
(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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句