【发布时间】:2015-03-28 00:35:46
【问题描述】:
我知道以下应该是未定义的行为
因为原始变量是 const。然而,怎么可能,
&x 和 &rx 这两个地址相同,但值
他们打印的(我不是说持有,因为它根本不可能),
不是。谢谢!
const int x=10;
int& rx = const_cast<int&>(x);
rx++;
cout << x << " and " << rx << endl;
cout << "is &x == &xr: " << (&x==&rx) << endl;
G++ 4.9 的输出是
10 and 11
is &x == &xr: 1
【问题讨论】:
-
你说过:这是未定义的行为。
-
你知道“未定义的行为”是什么意思吗?
-
问题是 to 对象指向相同的内存块并且具有相同的类型直到 cv 限定,但“持有”不同的对象......
-
是的。这是未定义的行为。
-
查看goo.gl/ANHfS7 以比较编译器和不同优化标志。虽然您应该永远依赖于这种未定义的行为,但了解正在发生的事情确实很有用。
标签: c++ const-cast