3

可能重复:
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 时尝试过的所有编译器。

这似乎与Can C++ 编译器假设 const bool & value 不会改变?所以我很高兴关闭这个。

4

1 回答 1

0

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

于 2012-10-07T20:00:07.010 回答