c ++ const_cast问题

时间:2011-04-19 03:24:50

标签: c++

const int a = 1;
int *p = const_cast<int*>(&a);
*p = 2;
cout << “value a=”<< a << endl;
cout << “value *p=” <<*p << endl;
cout << “address a=” <<&a << endl;
cout << “address p=” <<p << endl;

输出:

value a=1
value *p=2
address a=0xbff1d48c
address p=0xbff1d48c

WHY ??? 为什么相同的addr,diff值? 困惑。 谢谢!

2 个答案:

答案 0 :(得分:14)

在C ++语言中,尝试修改常量对象是非法的。这种尝试导致未定义的行为。

在您的程序中,*p = 2赋值会尝试修改常量对象a。行为未定义。您观察到的奇怪输出正是:未定义的行为。

对未定义的行为没有任何有意义的解释。

(您的编译器可能会将cout << a;语句翻译为cout << 1;,因为a的值无法合法更改。因此,无论您对a做什么,始终会打印1。)

答案 1 :(得分:2)

除了AndreyT之外,您可能想知道如果编辑常量会给出未定义的行为,那么为什么我们需要const_cast<>const_cast<>用于获取的写入权限,这些值不受出生时的写保护。只需尝试以下更改,它应该给出正确的行为:

int b = 1;  // 'b' is modifiable
const int a = b;
...