KKO*_*nge 19 c++ const reference const-reference
我在理解此代码段中的行为时遇到了一些麻烦:
unsigned int i = 2;
const int &r = i;
std::cout << r << "\n";
i = 100;
std::cout << r << "\n";
Run Code Online (Sandbox Code Playgroud)
第一个print语句按预期给出2,但是当我更改引用变量的值时,它不会反映在引用中.第二个印刷声明也给出2,但我认为它应该给100?
如果我将变量i变为类型int而不是unsigned int,它就像我期望的那样工作.这里发生了什么?
Sam*_*hik 33
您只能引用相同类型的对象.
你不能int引用一个unsigned int.
这里发生的事情基本上是:
const int &r = (int)i;
Run Code Online (Sandbox Code Playgroud)
一个新的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
Run Code Online (Sandbox Code Playgroud)
第二个印刷声明也给出2,但我认为它应该给100?
因为int在这里创建了临时.
因为const int &r = i;,i(unsigned int)需要首先转换为int,意味着临时int将被创建然后被绑定r(临时可以绑定到对const的左值引用),它与原始变量无关i.
如果我将变量i变成int类型而不是unsigned int,它就像我期望的那样工作.
因为不需要转换和临时,i可以直接绑定r.
| 归档时间: |
|
| 查看次数: |
730 次 |
| 最近记录: |