C/C++の条件演算子(三項演算子)の使い方をわかりやすく解説
C/C++における条件演算子(?:)は、別名三項演算子(Ternary Operator)とも呼ばれています。名前の由来は、この演算子が3つのオペランド(項)を必要とするためです。
条件演算子の基本構文
Exp1 ? Exp2 : Exp3;
ここで、Exp1・Exp2・Exp3はそれぞれ式を表します。コロンの位置と使い方に注目してください。
評価の流れ
? 演算子を含む式の値は、以下のように決定されます。
- まず Exp1 が評価されます。
- Exp1 が true(真) の場合 → Exp2 が評価され、その結果が式全体の値になります。
- Exp1 が false(偽) の場合 → Exp3 が評価され、その結果が式全体の値になります。
if-else文を置き換える
? 演算子は3つのオペランドを必要とするため「三項演算子」と呼ばれ、次のような形式の if-else 文を置き換えることができます。
if(condition) {
var = X;
} else {
var = Y;
}例として、次のコードを見てみましょう。
if(y < 10) {
var = 30;
} else {
var = 40;
}このコードは、条件演算子を使うと以下の1行に書き換えられます。
var = (y < 10) ? 30 : 40;
このように、単純な条件分岐であれば、if-else文よりも簡潔に記述できるのが条件演算子の大きなメリットです。
サンプルコード
実際にC++で動作を確認してみましょう。
#include <iostream>
using namespace std;
int main () {
// ローカル変数の宣言
int x, y = 10;
x = (y < 10) ? 30 : 40;
cout << "value of x: " << x << endl;
return 0;
}実行結果
value of x: 40
この例では、変数 y の値が 10 であるため、条件「y < 10」は false と判定されます。その結果、Exp3 にあたる 40 が評価され、x には 40 が代入されます。
補足:ネスト(入れ子)について
条件演算子は入れ子(ネスト)にすることも可能ですが、可読性が大きく低下するため、複雑な条件分岐では if-else 文や switch 文を使う方が保守性の高いコードになります。条件演算子を使うのは、単純な二択の代入処理など、簡潔に書ける場面に限定するのがおすすめです。
-
C++とOpenCVで動画のFPS値を取得する方法をわかりやすく解説
OpenCVで動画のFPS(Frames Per Second:1秒あたりのフレーム数)を取得するには、VideoCaptureクラスが提供するget()メソッドを使用します。引数にはCAP_PROP_FPSを指定します。このプロパティは、対象動画のFPS値を返します。プログラムの冒頭では、FPS値を格納するための整数型変数「FPS」を宣言しています。その後、FPS = cap.get(CAP_PROP_FPS);という処理によって、取得したFPS値を変数に保存します。以下のサンプルプログラムは、指定した動画ファイルのFPSを取得し、コンソールウィンドウに表示するものです。サンプルコード#in
-
Rubyの三項演算子(?:)の使い方を徹底解説!基本構文から注意点まで
Rubyの三項演算子とは? 三項演算子は「3つの部分」で構成される演算子で、「三項(ternary)」という名前もここから来ています。具体的には、条件式と2つの結果候補から成り立ちます。 つまり、三項演算子を使えば、通常複数行になるif/else文をたった1行のコンパクトなコードにまとめられるのです。 例えば、次のようなコードが… 1 :eat_apple else :buy_apple end このように書けます: 1 ? :eat_apple : :buy_apple これが三項演算子の力です。 では、具体的にどのように動作するのか、正しい構文はどうなっているのかを見ていき