考虑下面的代码片段:
int main()
{
const int i=3;
int *ptr;
ptr=const_cast<int*>(&i);
*ptr=5;
cout<<"i= "<<i<<endl; <------------------- statement 1
cout<<"*ptr= "<<*ptr<<endl; <------------- statement 2
return 0;
}
我得到的输出为:
i= 3
*ptr= 5
为什么i
不通过指针改变值?
我知道抛弃显式声明为 const 的变量的 const 特性并修改其值是“未定义的行为”。我很想知道:'编译器用值替换程序中的变量'是否有任何编译器优化机制?这意味着语句 1 被编译器解释为:
cout<<"i= "<<3<<endl;
即使声明
ptr=const_cast<int*>(&i);
被替换为
ptr=(int*)(&i);
我得到相同的输出:http: //ideone.com/5lzJA