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

C/C++の条件演算子(三項演算子)の使い方をわかりやすく解説

C/C++における条件演算子(?:)は、別名三項演算子(Ternary Operator)とも呼ばれています。名前の由来は、この演算子が3つのオペランド(項)を必要とするためです。

条件演算子の基本構文

Exp1 ? Exp2 : Exp3;

ここで、Exp1・Exp2・Exp3はそれぞれ式を表します。コロンの位置と使い方に注目してください。

評価の流れ

? 演算子を含む式の値は、以下のように決定されます。

  1. まず Exp1 が評価されます。
  2. Exp1 が true(真) の場合 → Exp2 が評価され、その結果が式全体の値になります。
  3. 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 文を使う方が保守性の高いコードになります。条件演算子を使うのは、単純な二択の代入処理など、簡潔に書ける場面に限定するのがおすすめです。

  1. 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

  2. Rubyの三項演算子(?:)の使い方を徹底解説!基本構文から注意点まで

    Rubyの三項演算子とは? 三項演算子は「3つの部分」で構成される演算子で、「三項(ternary)」という名前もここから来ています。具体的には、条件式と2つの結果候補から成り立ちます。 つまり、三項演算子を使えば、通常複数行になるif/else文をたった1行のコンパクトなコードにまとめられるのです。 例えば、次のようなコードが… 1 :eat_apple else :buy_apple end このように書けます: 1 ? :eat_apple : :buy_apple これが三項演算子の力です。 では、具体的にどのように動作するのか、正しい構文はどうなっているのかを見ていき