【发布时间】:2014-01-03 08:49:49
【问题描述】:
这是我的问题,问题出在 cmets
const int a = 5;
const_cast<int&>(a)=7; //throw over const attribute in a,and assign to 7
std::cout<<a<<std::endl; //why still out put 5!!!!!!!!!!
谁能告诉我为什么,推荐一些书籍说明这些问题? 谢谢!
【问题讨论】:
-
这是未定义的行为。它可以为所欲为。查看编译器的输出代码。可能只是
std::cout << 5 << std::endl;。 -
你在向你的编译器撒谎,说
const是非常量的。编译器有讨厌的方式来报复你,因为你不诚实;-)(编译器回击你的官方名称是“未定义的行为”)。 -
但是在
中,作者使用了类似的东西:se是一些实现中的集合,其中集合的键是const,Emp::iterator i = se.find(... );... const_cast (*i).setValue(someValue);为什么可以工作? -
@Ryan_Liu 您能否将有效 STL 示例的完整示例粘贴到上述问题的底部?如果没有完整的上下文,很难告诉你为什么它(大概)是有效的......
-
@Ryan_Liu 对于有效的 STL 问题,如果您在知道实际上不是 const 的东西上 const_casting 掉 const(在这种情况下,容器节点的内容),这不是未定义的行为.
标签: c++ undefined-behavior const-cast