非定数ポインターによる定数の変更
指定されたコードでは、定数変数 e は 2 に初期化されます。次に、const ポインタ w が e のアドレスを指すようにキャストされ、変数の const 性が暗黙的に削除されます。 w を逆参照し、それに新しい値を代入すると、e のアドレスの値が 2 から 5 に変更されます。
ただし、*w と e の値が出力されると、それらは異なって表示されます。
<code class="cpp">cout << *w << endl; // Outputs 5 cout << e << endl; // Outputs 2</code>
この動作は、*w と e が評価されるさまざまな方法を考慮することで説明できます:
したがって、値の違いは *w と e の異なる評価時間から生じます。 e のアドレスの値が変更されたにもかかわらず、定数変数自体はコンパイル時に変更されません。ただし、非定数ポインター w では、それが指すアドレスの値を変更できるため、*w.
の出力は 5 になります。以上が非 const ポインターでは実際の値の変更が可能であるにもかかわらず、変更された定数変数がコンパイル時に元の値を保持するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。