非 Const ポインターを使用した const の変更
C では、 const 変数は、一度初期化されると変更できません。ただし、特定のシナリオでは、const 変数が変更されたように見える場合があります。次のコードを考えてみましょう:
<code class="cpp">const int e = 2; int* w = (int*)&e; // (1) *w = 5; // (2) cout << *w << endl; // (3) cout << e << endl; // (4)</code>
このコードを実行すると、予期せぬ動作に気づくでしょう:
5 2
(2) で *w が 5 に変更されたにもかかわらず、 e はまだ元の値 2 を保持しています。この一見矛盾した動作は、次の要因から生じています:
その結果、*w が実行時に評価されると、変更された値 (5) が返されます。ただし、 e がコンパイル時に評価されるときは、元の値 (2) が使用されます。
この動作は、C では未定義の動作として知られています。 const 変数を直接的または間接的に変更すると、予期しない結果が生じるため、そのような状況では注意が必要です。
以上が非 const ポインターを使用して「const」変数を変更すると、機能しているように見えても、実際にはその値が変更されないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。