const_cast无法运行c ++?

Kha*_*vic 5 c++ const-cast

我有以下代码:

const int k=1;
    int *p=const_cast<int *>( &k);
    cout<<"k before="<<*p<<endl;
    *p=10;
    *const_cast<int *>( &k)=12;
    cout<<"k after="<<k<<endl;
Run Code Online (Sandbox Code Playgroud)

输出是:

k before=1
k after=1
Run Code Online (Sandbox Code Playgroud)

为什么const const不在这里工作?

Pet*_*der 12

const_cast如果你抛弃然后写入值,会导致未定义的行为const.如你所见,没有做任何事情是有效的行为.

在您的特定示例中,可能发生的情况是编译器看到k使用const存储类声明的,知道它不能(合法地)更改,并替换

cout<<"k after="<<k<<endl;
Run Code Online (Sandbox Code Playgroud)

cout<<"k after="<<1<<endl;
Run Code Online (Sandbox Code Playgroud)

如果您关闭优化,您可能(或可能不会)获得不同的结果.

抛弃const调用未定义行为的原因是编译器可以自由地进行这样的优化.如果const变量可以自由地转换为非const变量并写入,那么const对编译器来说绝对没有意义.

  • 编译器可以选择将`const`对象放在只读内存中,在这种情况下,该程序可能会因访问冲突而崩溃. (5认同)