可能重复:
Is const_cast safe?
显然我从来没有写过这段代码,但它是一个非常简单的例子,它出现在一个真实的程序中。
#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&
该函数无法更改传入的值并相应地生成代码?< / p>
编辑:我尝试过的所有编译器都输出了更改后的值100。
这似乎是Can C++ compiler assume a const bool & value will not change?的副本,所以我很高兴关闭这个。
答案 0 :(得分:0)
除非您知道原始值是否为常量,否则这不是明确定义的行为。它将在您给出的确切示例中起作用。但是,如果传入const变量,则可能导致内存访问冲突。这是因为编译器将const变量放在只读内存页面上。