dan*_*win 4 c++ const reference c++11
我对下面这段代码感到有些困惑.b如何仍然引用a但具有不同的值?
#include <iostream>
using namespace std;
int main()
{
const int a = 5;
const int &b = a;
++(int&)b;
cout << a << endl;//returns 5
cout << b << endl;//returns 6
cout << "mem a:" << &a << endl; //returns 0x61ff18
cout << "mem b:" << &b << endl; //returns 0x61ff18
return 0;
}
Run Code Online (Sandbox Code Playgroud)
das*_*ght 11
此行为未定义.
你可以合法地从一个非常数对象的常量引用中抛出常量; 但是,从引用真实的引用中转换const-ness const会导致未定义的行为.
在这种情况下,似乎编译器创建了一个要存储的内存位置5,以便为您提供一个可以作为引用的位置b,而变量a本身则被优化为一个常量.您的代码非法修改通过引用的位置b,产生6,而线
cout << a << endl;
Run Code Online (Sandbox Code Playgroud)
被优化成
cout << '5' << endl;
Run Code Online (Sandbox Code Playgroud)
所以它仍然产生一个5.
| 归档时间: |
|
| 查看次数: |
648 次 |
| 最近记录: |