当我在 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 的指针的限制”。
我知道尝试修改常量在概念上是错误的,但我发现这个结果很奇怪。任何人都可以解释其背后的原因吗?