0
void main() {

const int a = 10;
const int *b = &a;
int *c = const_cast <int*>(b);
*c = 5;
cout<<a<<" "<<*b<<" "<<*c<<endl; //10 5 5
cout<<&a<<" "<<b<<" "<<c<<endl; //same address
cout<<*(int*)&a<<" "<<*&a<<endl; //5 10
}

是什么让类型转换影响了这一点?值存储在哪里?

4

1 回答 1

1

该程序具有未定义的行为:const_cast<int*>(b)您从实际存在的对象中删除const限定符,const并且对该对象的分配可能具有任意效果。

观察到的效果表明,实现a用其不可变值替换了使用,而它取消引用b以确定值。不过,它也可能具有任意其他效果。例如,尝试写入写保护位置时可能出现分段错误。好吧,任何事情都有可能发生。

于 2014-04-26T18:36:12.370 回答