【C++入門】三項条件演算子(?:)の使い方と結果の型を決めるルールを解説
条件演算子(?:)とは
C++の条件演算子(? :)は、3つのオペランド(被演算子)を受け取る三項演算子です。動作の流れは以下の通りです。
- 第1オペランドは暗黙的にbool型へ変換されます。まず評価が行われ、すべての副作用が完了してから次の処理に進みます。
- 第1オペランドがtrue(1)と評価された場合、第2オペランドが評価されます。
- 第1オペランドがfalse(0)と評価された場合、第3オペランドが評価されます。
結果の決まり方と適用されるルール
条件演算子の結果は、実際に評価された方のオペランド(第2または第3)の値になります。つまり、条件式では最後の2つのオペランドのうちどちらか片方だけが評価されます。
条件演算子の評価規則は非常に複雑で、上記の手順はあくまで概要にすぎません。また、条件式には右から左への結合規則が適用され、第1オペランドは整数型またはポインタ型である必要があります。
第2・第3オペランドの型については、次のルールが適用されます。
- 両方のオペランドが同じ型の場合:結果もその型になります。
- 両方が算術型または列挙型の場合:通常の算術変換(標準変換)により、共通の型へ変換されます。
- 両方がポインタ型、または一方がポインタ型でもう一方が0と評価される定数式の場合:ポインタ変換により、共通の型へ変換されます。
- 両方が参照型の場合:参照変換により、共通の型へ変換されます。
- 両方がvoid型の場合:共通の型はvoid型になります。
- 両方が同じユーザー定義型の場合:共通の型はそのユーザー定義型になります。
- オペランドの型が異なり、少なくとも一方がユーザー定義型の場合:言語の規則に従って共通の型が決定されます。
サンプルコード
#include <iostream>
using namespace std;
int main() {
int i = 1, j = 2;
cout << ( i > j ? i : j ) << " の方が大きいです。" << endl;
}
実行結果
2 の方が大きいです。
コードの解説
この例では、i = 1、j = 2 であるため、条件式「i > j」はfalse(0)と評価され、第3オペランドの j が評価されます。その結果として 2 が出力されます。
このように、if文を使わずに1行で条件分岐を記述できるのが三項条件演算子の利点です。単純な条件による値の選択を行う場面では、コードを簡潔に保つことができます。
-
C#の三項演算子(条件演算子)の使い方を解説
C#における三項演算子は、条件演算子とも呼ばれる演算子です。3つのオペランドを受け取り、ブール式(真偽値)を評価した結果に応じて、いずれか一方の値を返します。if-else文を1行で簡潔に記述できるため、条件分岐のコードを読みやすくしたい場面でよく使われます。三項演算子の基本構文b = (a == 1) ? 20 : 30;この式の動作は以下のとおりです。最初のオペランド (a == 1) の評価結果がtrue(真)の場合 → 2番目のオペランド 20 が返される最初のオペランドの評価結果がfalse(偽)の場合 → 3番目のオペランド 30 が返されるサンプルプログラム実際に三項演算子を使っ
-
Pythonの三項演算子とは?基本構文から実装方法まで徹底解説
多くのプログラミング言語では、三項演算子(条件演算子)がサポートされており、これを使うことで条件式を簡潔に記述できます。Pythonの三項演算子も同様に、二値の条件の評価結果に基づいて値を返すために使用されます。条件(真偽値)を入力として受け取るため「if-else」文とよく似ていますが、同時に値を返すという点で、関数のような振る舞いをするのも特徴です。基本構文[on_true] if [expression] else [on_false]それでは、2つの整数を比較する簡単なプログラムを書いてみましょう。a. Pythonのif-else文を使用した場合:>>> x, y