一个变量中的2个值(const和const_cast)c ++

时间:2014-04-26 17:24:34

标签: c++ const const-cast

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
}

是什么让类型演员影响了这个? 存储的值在哪里?

1 个答案:

答案 0 :(得分:1)

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

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