2

コードに従わなければならない -

    const int WEEKDAYS = 7;
    const int *pWeekdays = &WEEKDAYS;
    *((int*) pWeekdays) = 9;
    cout << WEEKDAYS << endl;

7 つまり、行*((int*) pWeekdays) = 9;は何の効果もなかったか、エラーを投げました。

どうやらそうするのが好きなのですが7 = 9、なぜエラーがスローされないのですか?

4

2 に答える 2

6

constness をキャストして const オブジェクトに変更可能にアクセスすることは、単純な未定義の動作です。プログラムは何でも実行でき、診断は必要ありません。

クラッシュするプログラムにバグがあるのは事実ですが、バグのあるプログラムが常にクラッシュするとは限らないことを常に覚えておいてください。(または、ソクラテスが言ったように、「すべての猫が魚であるとは限らない」。)


C++ では、C スタイルのキャストを絶対に使用しないでください。より適切な を試していればstatic_cast<int*>(pWeekdays)、正しい診断が得られたはずです。

于 2012-08-28T17:40:43.597 に答える
0

WEEKDAYS定数として定義し、格納されているアドレスの値を更新しているため、技術的には定数を更新していません*pWeekdayspWeekdays

として定義した参照WEEKDAYSまたはpWeekdays更新されないconstant

于 2012-08-28T17:43:19.183 に答える