【发布时间】:2012-09-28 03:37:09
【问题描述】:
可能重复:
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&,所以函数不能改变传入的值并相应地生成代码?
编辑:我尝试过的所有编译器都输出了更改后的值,100。
这似乎与 Can C++ compiler assume a const bool & value will not change? 重复,所以我很乐意关闭它。
【问题讨论】:
-
那个问题是关于从数据中删除 const 的,这些数据最初是 const ,但这里不是这种情况。除非我错过了这个问题的一些细节,这是可能的:)
-
阅读该问题的第一个答案,以及对该答案的最后评论。它直接适用于这个问题。
-
我不确定它是否适用。我的问题是编译器在为“main”生成代码时是否可以假设当它调用“change”时,参数的值不能改变,因为它是 const。我认为这是一个稍微不同的问题。
-
您的问题标题和描述似乎与您刚才所说的略有不同。您可以考虑打开一个新问题,询问您真正感兴趣的内容。“这是明确定义的行为” - 答案是肯定的,正如链接问题所给出的那样。如果您的问题是编译器是否会尝试避免重新读取本地的
thing,请提出该问题。 -
实际上有人链接了stackoverflow.com/questions/5128639/…,这似乎确实回答了这个问题,尽管他们似乎已经删除了评论。在这种情况下,我很高兴将其作为重复问题删除。
标签: c++