Kap*_*pil 3 c++ casting const reference
我无法理解为什么在下面的代码片段引用及其相关变量给出不同的结果.
const int x = 10;
const int &ptr = x;
int& y = const_cast<int&>(ptr);
y = 19;
std::cout << "x = " << x << " ptr=" << ptr << " y=" << y << std::endl;
Run Code Online (Sandbox Code Playgroud)
输出:
x=10 ptr=19 y=19
Run Code Online (Sandbox Code Playgroud)
按我的理解,引用只是变量别名,为什么ptr是19和x是10?这是事做const还是const_cast?
从5.2.11 Const cast [expr.const.cast]:
注意:根据对象的类型,通过指针,左值或指向数据成员的指针的写入操作
const_cast可以产生未定义的行为(7.1.6.1). - 结束说明]
你正在执行未定义的行为,所以你很幸运,你的计算机没有内爆.:)
这是事做
const还是const_cast?
是.
即便如此const_cast,修改最初的对象仍然是未定义的行为const.或者,换句话说,使用const_cast写入const对象是非法的.