问一个C++的const_cast问题

来源:百度知道 编辑:UC知道 时间:2024/06/03 04:40:42
int main()
{
const int data = 1;
const int* cp = &data;
int* p = const_cast<int*>(cp);
*p = 6;
cout << *p << endl;
cout << data << endl;
return 0;
}
这个小程序输出结果为:6 和 1,为什么data的值不是6?(说明:p的值和&data是一样的,即同一个地址中有了两个不同的值,请大虾帮忙。3Q。)

Effective C++ 书上有详细阐述。

原因是:常量替换

编译器用1直接替换data变量了(注意不是&data)

哈哈,你想用const_cast来欺负编译器?编译器也会捉弄你的!

其实,data的值并没有真正的改变,data是被放在一个const数据段的,是不能被改变的,编译器只是给*p临时分配了一个变量给它。其实转换的目的是可以传值,并不是真正改变const对象的值