このコードをMSVSC ++ 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へのポインターの制限を明示的に取り除くことが可能です」。
定数を変更しようとするのは概念的に間違っていることは知っていますが、この結果は非常に奇妙だと思います。誰かがその背後にある理由を説明できますか?