コードに従わなければならない -
const int WEEKDAYS = 7;
const int *pWeekdays = &WEEKDAYS;
*((int*) pWeekdays) = 9;
cout << WEEKDAYS << endl;
7
つまり、行*((int*) pWeekdays) = 9;
は何の効果もなかったか、エラーを投げました。
どうやらそうするのが好きなのですが7 = 9
、なぜエラーがスローされないのですか?
constness をキャストして const オブジェクトに変更可能にアクセスすることは、単純な未定義の動作です。プログラムは何でも実行でき、診断は必要ありません。
クラッシュするプログラムにバグがあるのは事実ですが、バグのあるプログラムが常にクラッシュするとは限らないことを常に覚えておいてください。(または、ソクラテスが言ったように、「すべての猫が魚であるとは限らない」。)
C++ では、C スタイルのキャストを絶対に使用しないでください。より適切な を試していればstatic_cast<int*>(pWeekdays)
、正しい診断が得られたはずです。
WEEKDAYS
定数として定義し、格納されているアドレスの値を更新しているため、技術的には定数を更新していません*pWeekdays
。pWeekdays
として定義した参照WEEKDAYS
またはpWeekdays
更新されないconstant