C ++新手并学习const_cast - 让下面的代码感到困惑:
int main(){
const int j = 1;
int * p = (int *)(&j);
cout << j << ' ' << *p << endl;
cout << &j << ' ' << p << endl;
*p = 2;
cout << j << ' ' << *p << endl;
cout << &j << ' ' << p << endl;
const int k = 1;
int * q = const_cast<int*>(&k);
cout << k << ' ' << *q << endl;
cout << &k << ' ' << q << endl;
*q = 2;
cout << k << ' ' << *q << endl;
cout << &k << ' ' << q << endl;
return 0;
}
输出
1 1
00A2FD9C 00A2FD9C
1 2
00A2FD9C 00A2FD9C
1 1
00A2FD84 00A2FD84
1 2
00A2FD84 00A2FD84
有谁可以告诉我为什么地址(&amp; i和p,或&amp; j和q)是相同的,但是值(i和* p,或j和* q)是不同的?我正在使用Visual Studio 2013RC。
答案 0 :(得分:3)
1
而不引用内存位置。
答案 1 :(得分:0)
如果const_cast<T*>(obj)
将其作为常量开始使用,则使用obj
去掉const 和修改对象是未定义的行为。在您的示例中,您告诉编译器j
不会更改,编译器只是将j
的所有用法替换为1
的使用。然后你打破了承诺,编译器生成的代码将不再关注你了,而是做了它喜欢的事情。