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
}
是什么让类型演员影响了这个? 存储的值在哪里?
答案 0 :(得分:1)
程序具有未定义的行为:使用const_cast<int*>(b)
从实际为const
的对象中删除const
限定符,并且对该对象的赋值可能具有任意效果。
观察到的效果表明,实现将a
的使用替换为其不可变值,而取消引用b
以确定值。不过,它也可能具有任意其他效果。例如,尝试写入写保护位置时的分段错误可能是可能的结果。好吧,任何事情都可能发生。