int x = x における左辺値から右辺値への変換と未定義の動作
背景:
C コード int x = x;変数 x を独自の値で初期化しますが、この値は自動変数では初期化されません。したがって、値は不定であり、未定義の動作が発生する可能性があります。
左辺値から右辺値への変換:
左辺値から右辺値への変換は、左辺値 (参照またはアドレスを持つオブジェクト) を prvalue (アドレスのない値) に変換します。 C 標準では、初期化されていない値に対してこの変換を実行すると、未定義の動作が発生すると規定されています。
右手 x は左辺値から右辺値への変換を受けますか?
はい。 x は代入の右側にあるにもかかわらず、依然として左辺値です。代入演算子には、左側 (値の保存場所) に lvalue が必要で、右側 (値のソース) に prvalue が必要です。
結論:
したがって、右辺の x は左辺値から右辺値への変換を受け、初期化されていない値を参照するため、提供されたコードは次のようになります。 未定義の動作.
以上がC で `int x = x;` が未定義の動作を引き起こすのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。