抛弃康斯特,就是这种定义明确的行为

Casting away const, is this well defined behavior?

本文关键字:定义 康斯特 抛弃      更新时间:2023-10-16

可能的重复项:
const_cast安全吗?

显然,我永远不会写这段代码,但它是一个非常简单的例子,说明在实际程序中出现的东西。

#include <iostream>
void change(const int& data)
{
    int& data2 = const_cast<int&>(data);
    data2 = 100;
}
int main()
{
    int thing = 123;
    change(thing);
    std::cout << thing << "n";
}

这是定义良好的行为,这会更改引用的数据,还是允许编译器假设因为它传递了const int&,函数无法更改传入的值并相应地生成代码?

编辑:我尝试过的所有编译器都输出更改的值 100。

这似乎是编译器可以假设常量布尔值和值不会改变C++重复吗?所以我很乐意关闭这个。

这不是定义良好的行为,除非您知道原始值是否恒定。它将在您给出的确切示例中工作。但是,如果您传入了 const 变量,则可能会导致内存访问冲突。这是因为编译器将 const 变量放在只读内存页上。