从 unsigned int 转换为 int 的常量引用
Const reference to a casted int from unsigned int
我在理解这段代码中的行为时遇到一些问题:
unsigned int i = 2;
const int &r = i;
std::cout << r << "\n";
i = 100;
std::cout << r << "\n";
第一个打印语句如我所料给出了 2,但是当我更改引用变量的值时,它并没有反映在引用中。第二个打印语句也给了2,不过我觉得应该给100吧?
如果我将变量 i
设为类型 int
而不是 unsigned int
,它将按我预期的那样工作。这里发生了什么?
The second print statement also gives 2, but I think it should give 100?
因为这里创建了一个临时的int
。
对于const int &r = i;
,i
(unsigned int
)需要先转换为int
,即创建一个临时的int
,然后绑定到 r
(临时变量可以绑定到对 const 的左值引用),它与原始变量 i
不再有任何关系。
If I make variable i into type int instead of unsigned int, it works as I expect.
因为不需要转换和临时,i
可以直接绑定到r
。
您只能引用相同类型的对象。
您不能 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
= 2
(gdb) p &i
= (unsigned int *) 0x7fffffffea0c
(gdb) p &r
= (const int *) 0x7fffffffe9fc
(gdb) q
我在理解这段代码中的行为时遇到一些问题:
unsigned int i = 2;
const int &r = i;
std::cout << r << "\n";
i = 100;
std::cout << r << "\n";
第一个打印语句如我所料给出了 2,但是当我更改引用变量的值时,它并没有反映在引用中。第二个打印语句也给了2,不过我觉得应该给100吧?
如果我将变量 i
设为类型 int
而不是 unsigned int
,它将按我预期的那样工作。这里发生了什么?
The second print statement also gives 2, but I think it should give 100?
因为这里创建了一个临时的int
。
对于const int &r = i;
,i
(unsigned int
)需要先转换为int
,即创建一个临时的int
,然后绑定到 r
(临时变量可以绑定到对 const 的左值引用),它与原始变量 i
不再有任何关系。
If I make variable i into type int instead of unsigned int, it works as I expect.
因为不需要转换和临时,i
可以直接绑定到r
。
您只能引用相同类型的对象。
您不能 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
= 2
(gdb) p &i
= (unsigned int *) 0x7fffffffea0c
(gdb) p &r
= (const int *) 0x7fffffffe9fc
(gdb) q