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文を使う方が良いでしょう。
-
C#の三項演算子(条件演算子)とは?基本構文と使い方を実例付きで解説
三項演算子とは三項演算子は、C#における条件演算子の一つです。「?」と「:」を使って3つのオペランドを受け取り、ブール式(true / false)を評価することで、条件に応じた値を選択します。if文を使わずに1行で条件分岐を記述できるため、シンプルな条件判定ではコードを簡潔にまとめられるのが大きな特徴です。基本構文y = (z == 1) ? 100 : 180;この構文では、まず最初のオペランドである条件式「z == 1」が評価されます。条件式が true(1) の場合 → 2番目のオペランド「100」が返される条件式が false(0) の場合 → 3番目のオペランド「180」が返される
-
C#の三項演算子(条件演算子)とは?基本構文と使い方を解説
三項演算子(条件演算子)とは三項演算子は、C#における条件演算子(Conditional Operator)とも呼ばれる演算子で、「?」と「:」を使って条件分岐を1行で簡潔に記述できます。名前の通り、3つのオペランド(引数)を受け取り、ブール式(真偽値)を評価した結果に応じて、いずれか一方の値を返します。基本構文条件式 ? 真の場合の値 : 偽の場合の値;例えば、次のように記述します。y = (x == 1) ? 70 : 100;この場合、最初のオペランドである条件式「(x == 1)」が true(1)と評価されれば、2番目のオペランド「70」が返されます。逆に false(0)と評価され