const_cast的奇怪行为

Edu*_*yan 1 c++ reference const-cast

请考虑以下代码:

我声明一个新的引用结束赋值给一个via const_cast.然后我只是增加参考值打印地址和值.

#include <iostream>
using namespace std;
int main()
{
    const int a = 7;
    int &b = const_cast<int&>(a);
    ++b;
    cout<<"Addresses  "<<&a<<" "<<&b<<endl;
    cout<<"Values  "<<a<<" "<<b<<endl;
}

//output
Addresses  0x7fff11f8e30c 0x7fff11f8e30c
Values  7 8
Run Code Online (Sandbox Code Playgroud)

如何在同一地址中有2个不同的值?

use*_*267 6

因为修改声明为的变量const是未定义的行为,所以任何事情都可能发生.


Mik*_*our 5

修改常量对象会产生未定义的行为,因此您的程序可以(原则上)执行任何操作.

保持此行为未定义的一个原因是允许优化用其值替换常量变量(因为您已声明该值永远不会更改).这就是这里发生的事情:在编译时a被替换为值7,因此无论你在运行时尝试做什么,都将保留该值.