同じアドレスにある 2 つの値: Const 変数の謎
このコードは、const 変数とメモリ アドレスに関係する興味深い動作を示しています。提供されたコードには、22 に割り当てられた const 整数 N が含まれています。次に、const_cast を使用して N のアドレスを非 const ポインター pN に変換し、それに値 33 を割り当てます。
出力を調べるとき、次のようにします。同じメモリアドレスにある 2 つの異なる値を観察します。変数 N は 22 で変化しませんが、*pN は変更された値 33 を示します。
ただし、そのメモリ アドレスには値が 1 つだけ格納されることを理解することが重要です。コンパイラは、const 変数に許可されている最適化を利用しています。この最適化では、N への参照はコンパイル時の値 (22) として扱われます。したがって、pN が同じメモリ アドレスを指している場合でも、実質的には最適化された値を指していることになり、次のような出力が得られます。
コンパイラの最適化は const 変数を超えて拡張される可能性があることに注意することが重要です。一般に、不必要なメモリ アクセスの削除、命令の再配置、無関係とみなされるコードの一部の削除など、コードの効率を向上させるための変更を加えることができます。これらの最適化により通常はパフォーマンスが向上しますが、ここで観察した例のような予期しない結果が生じる場合があります。
以上がConst 変数と非 Const ポインタが同じメモリ アドレスで異なる値を示すにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。