这是代码
int main()
{
const int i = 2;
const int * pi = &i;
int* j = const_cast<int *> (pi);
*j = 11;
std::cout << *pi << std::endl;
std::cout << i << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
结果:
11
2 <---为什么?
正如http://en.cppreference.com/w/cpp/language/const_cast所说:
尽管
const_cast可以从任何指针或引用中删除constness或volatile,但使用生成的指针或引用来写入已声明const的对象或访问已声明的对象将volatile调用未定义的行为.
在这种情况下,您的编译器显然已经过优化
std::cout << i << std::endl;
Run Code Online (Sandbox Code Playgroud)
至
std::cout << 2 << std::endl;
Run Code Online (Sandbox Code Playgroud)
既然i是const,它的价值不能在任何有效的程序中改变.(实际上,i 确实改变了,因为程序是无效的;但是你的编译器 - 非常正确 - 并不关心这种可能性.C++编译器和程序员通常认为优化正确代码比缓解更重要错误代码的错误.)
| 归档时间: |
|
| 查看次数: |
62 次 |
| 最近记录: |