【发布时间】:2011-01-31 07:18:13
【问题描述】:
我对以下代码中发生的事情有点困惑:
const int e = 2;
int* w = ( int* ) &e; // (1) cast to remove const-ness
*w = 5; // (2)
cout << *w << endl; // (3) outputs 5
cout << e << endl; // (4) outputs 2
cout << "w = " << w << endl; // (5) w points to the address of e
cout << "&e = " << &e << endl;
在(1)中,w指向e的地址。在 (2) 中,该值更改为 5。但是,当显示 *w 和 e 的值时,它们的值不同。但是如果你打印 w 指针和 &e 的值,它们的值/地址是相同的。
为什么 e 仍然包含 2,即使它已更改为 5?它们是否存储在单独的位置?还是临时的?但是w指向的值怎么还是e的地址呢?
【问题讨论】:
-
你处于未定义的行为领域——任何事情都有可能发生。
-
我的大脑太累了,看不出发生了什么,但你可以使用 const_cast 来做这件事。如果您只是想了解正在发生的事情,您可以忽略此评论。
-
@erelender:您可以为此使用
const_cast,但这不会使行为变得更不确定。
标签: c++ pointers casting const-correctness