ホームページ > バックエンド開発 > C++ > C の初期化には左辺値から右辺値への変換が必要ですか?

C の初期化には左辺値から右辺値への変換が必要ですか?

Susan Sarandon
リリース: 2024-12-15 12:33:08
オリジナル
818 人が閲覧しました

Does C   Initialization Require Lvalue-to-Rvalue Conversion?

初期化には左辺値から右辺値への変換が必要ですか?

初期化に左辺値から右辺値への変換が必要かどうかについて、C 11 標準は依然として曖昧です。 。ただし、特に指定がない限り、右辺値は組み込み演算子のオペランドとして期待されることが証拠によって示唆されています。このアプローチは、イニシャライザのコンテキストに拡張されました。

推測: 値に予期される Prvalues

想定される仕様では、値が必要な場合は常に prvalue が予期されます。初期化中。これは、オブジェクトの初期化時に左辺値から右辺値への変換が必要であることを意味します。

予想の結果

初期化で prvalue が予期される場合、次のことが発生します。

  • int x = x;左辺値から右辺値への変換が行われ、x が初期化されていないため未定義の動作が発生します。
  • int y = 0; のようなコードの形式が不正です。 int x = y;、y は左辺値です。
  • 一貫性のない動作。 x == y と仮定すると、z = y は未定義の動作ですが、z = x はそうではありません。

さらなる証拠

この推測を裏付ける追加の証拠は次のとおりです。

  • 規格の第 8.5/16 項は、 「標準変換」が必要ですが、カテゴリ変換については言及されていません。
  • パラグラフ 4.1 では、初期化されていないオブジェクトに左辺値から右辺値への変換を適用するときの未定義の動作について言及しています。
  • 欠陥レポートではパラグラフ 4.1 の言い換えを提案しています。初期化されていないオブジェクトなど、不定の値を持つオブジェクトを含める

結論

提供された証拠に基づくと、最も可能性の高い解釈は、初期化では prvalue が期待されており、初期化されていない lvalue を初期化子として使用すると未定義の動作が発生するというものです。 。この解釈は、特に指定がない限り、組み込み演算子で右辺値を期待するというより広範なアプローチと一致しています。

以上がC の初期化には左辺値から右辺値への変換が必要ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート