ホームページ >バックエンド開発 >C++ >三項演算子の結果は左辺値ですか?それとも右辺値ですか?

三項演算子の結果は左辺値ですか?それとも右辺値ですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-09 20:50:13332ブラウズ

Is the Ternary Operator's Result an Lvalue or an Rvalue?

三項条件演算子とその結果の左辺値または右辺値

三項/条件演算​​子 ('?:') は、選択のための短縮構文を提供します。条件に基づく 2 つの式のうちの 1 つ。この演算子の結果の型を理解することは、さまざまなプログラミング タスクにとって重要です。

左辺値としての条件式

条件演算子は、2 番目と 3 番目のオペランドが左辺値の場合、左辺値を返します。同じタイプの。これは、次のコードの両方のオペランド (x と y) が整数である場合に発生します:

int x = 1;
int y = 2;
(x > y ? x : y) = 100; // Assignment is allowed since the result is an lvalue

この場合、条件式 (x > y ? x : y) は左辺値であり、これにより次のことが可能になります。後続の 100 への代入。

条件式として右辺値

ただし、第 2 オペランドと第 3 オペランドの型が異なる場合、条件式は右辺値になります。これは、次のコードで明らかです。

int x = 1;
long y = 2;
(x > y ? x : y) = 100; // Error: Assignment is not allowed for rvalues

y の型と一致するように x を long に暗黙的に変換するため、条件式は右辺値になります。右辺値は変更できないため、代入操作は失敗します。

結果の型の決定

条件式の型と値のカテゴリはコンパイル時に決定されます。これは次の規則に従います。

  • 両方のオペランドが同じ型の左辺値である場合、結果はその型の左辺値になります。
  • 両方のオペランドが右辺値である場合、結果は次のようになります。 prvalue (型消去された右辺値)。
  • 一方のオペランドが左辺値で、もう一方が左辺値の場合右辺値、結果は右辺値です。

これらのルールを理解すると、三項/条件演算​​子を効果的に使用できます。

以上が三項演算子の結果は左辺値ですか?それとも右辺値ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。