C++
 Computer >> コンピューター >  >> プログラミング >> C++

C++の三項演算子(条件演算子 ? :)とは?基本の仕組みと使い方を解説

三項演算子(条件演算子 ? :)とは

C++における条件演算子(? :)は、3つのオペランド(被演算子)を受け取ることから「三項演算子」と呼ばれています。簡単な条件分岐をif文を使わずに1行で記述できるため、コードを簡潔にしたい場面でよく使われる演算子です。

条件演算子の動作の流れ

条件演算子は次のような手順で動作します。

  • 第1オペランドは暗黙的にbool型へ変換されます。評価が行われ、すべての副作用が完了してから処理が続行されます。
  • 第1オペランドがtrue(1)と評価された場合、第2オペランドが評価されます。
  • 第1オペランドがfalse(0)と評価された場合、第3オペランドが評価されます。
  • 条件演算子の結果は、実際に評価された側のオペランド(第2または第3)の値となります。つまり、最後の2つのオペランドのうち、必ずどちらか一方だけが評価されます。
  • 条件式は右から左へ結合します(右結合)。また、第1オペランドは整数型またはポインタ型である必要があります。

なお、条件演算子の評価ルールは非常に複雑です。上記の手順はあくまで概要であり、詳細な仕様は言語規格で定められています。

第2・第3オペランドに適用される型変換のルール

第2および第3オペランドには、以下のルールが適用されます。

  • 両方のオペランドが同じ型の場合、結果もその型になります。
  • 両方が算術型または列挙型の場合、通常の算術変換(標準変換)が行われ、共通の型へと変換されます。
  • 両方がポインタ型の場合、または一方がポインタ型でもう一方が0と評価される定数式の場合、ポインタ変換によって共通の型へ変換されます。
  • 両方が参照型の場合、参照変換によって共通の型へ変換されます。
  • 両方がvoid型の場合、共通の型はvoid型になります。
  • 両方が同じユーザー定義型の場合、共通の型はそのユーザー定義型になります。
  • オペランドの型が異なり、少なくとも一方がユーザー定義型である場合は、言語の規則に基づいて共通の型が決定されます。

サンプルコード

ここでは、2つの整数のうち大きい方を出力するプログラムを紹介します。

#include <iostream>
using namespace std;

int main() {
    int i = 1, j = 2;
    cout << ( i > j ? i : j ) << " is greater." << endl;
}

実行結果

2 is greater.

この例では、まず条件式「i > j」が評価されます。iは1、jは2なので条件はfalseとなり、第3オペランドであるjの値「2」が出力されます。このように、三項演算子を使えば単純な条件分岐を簡潔に表現できます。ただし、条件が複雑になる場合は可読性を考慮してif文を使う方が良いでしょう。

  1. C#の三項演算子(条件演算子)とは?基本構文と使い方を実例付きで解説

    三項演算子とは三項演算子は、C#における条件演算子の一つです。「?」と「:」を使って3つのオペランドを受け取り、ブール式(true / false)を評価することで、条件に応じた値を選択します。if文を使わずに1行で条件分岐を記述できるため、シンプルな条件判定ではコードを簡潔にまとめられるのが大きな特徴です。基本構文y = (z == 1) ? 100 : 180;この構文では、まず最初のオペランドである条件式「z == 1」が評価されます。条件式が true(1) の場合 → 2番目のオペランド「100」が返される条件式が false(0) の場合 → 3番目のオペランド「180」が返される

  2. C#の三項演算子(条件演算子)とは?基本構文と使い方を解説

    三項演算子(条件演算子)とは三項演算子は、C#における条件演算子(Conditional Operator)とも呼ばれる演算子で、「?」と「:」を使って条件分岐を1行で簡潔に記述できます。名前の通り、3つのオペランド(引数)を受け取り、ブール式(真偽値)を評価した結果に応じて、いずれか一方の値を返します。基本構文条件式 ? 真の場合の値 : 偽の場合の値;例えば、次のように記述します。y = (x == 1) ? 70 : 100;この場合、最初のオペランドである条件式「(x == 1)」が true(1)と評価されれば、2番目のオペランド「70」が返されます。逆に false(0)と評価され