当我在 MS VS C++ 2010 上运行此代码时:
#include <iostream>
int main() {
const int a = 10;
const int *b = &a;
int *c = (int *)b;
*c = 10000;
std::cout << c << " " << &a << std::endl;
std::cout << *c << " " << a << " " << *(&a) << std::endl;
return 0;
}
输出结果为:
0037F784 0037F784
10000 10 10
写那段代码的动机来自Stroustrup的《C++程序设计语言》中的这句话:“通过显式类型转换,可以明确地消除指向const的限制”。我知道尝试修改一个常量在概念上是错误的,但我觉得这个结果相当奇怪。有人能解释一下背后的原因吗?