抛弃const,这是明确定义的行为吗?

时间:2012-10-07 19:57:11

标签: c++

  

可能重复:
  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?的副本,所以我很高兴关闭这个。

1 个答案:

答案 0 :(得分:0)

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