对于以下片断,为什么const_cast不会修改调用函数中的值?
#include <iostream>
using namespace std;
void fun(const int *p)
{
int *q = const_cast<int *>(p);
*q = *q * 10;
cout<<"q: "<<q<<"\t Value: "<<*q<<endl;
}
int main()
{
const int a = 10;
const int *z = &a;
fun(z);
cout<<"z: "<<z<<"\t"<<"Address of a: "<<&a<<endl;
cout<<"value at z: "<<*z<<"\t\t value in a: "<<a<<endl;
}
产生的输出是
q: 0x7fff65910fcc Value: 100
z: 0x7fff65910fcc Address of a: 0x7fff65910fcc
value at z: 100 value in a: 10
为什么即使我试图修改它在乐趣的值不被修改()?
a和指针z的地址是如何相同,但值是不同的?
它是一种未定义的行为与const_cast?
请注意,编译器可能要使用你给他关于常量性的信息来进行一些优化。(这是拍摄约常量性照顾的第二个原因,第一个是“不错的代码“告诉程序员它不会触及你的数据) – leemes 2013-05-12 09:45:27