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

C/C++における三項演算子(?:)とif~else文の違いとは?使い分けのポイントを解説

三項演算子は条件演算子とも呼ばれ、ある条件を判定し、その結果に応じて処理を行うための演算子です。三項演算子を使わなくても、if~else文による条件分岐で同じ処理を実現できます。

多くの場合、三項演算子とif~else文の動作結果は同じです。しかし、状況によってはif~else文が使えず、三項演算子を使わなければならないケースが存在します。その代表例が「定数(const)変数への値の代入」です。

const修飾された変数には、宣言時に一度だけ値を設定できます。if~else文では宣言後に代入することになるためコンパイルエラーになりますが、三項演算子を使えば宣言と同時に値を初期化できるため、この問題を回避できます。

if~else文で書いた場合(コンパイルエラーになる例)

#include<iostream>
using namespace std;
main() {
    int a = 10, b = 20;
    const int x;
    if(a < b) {
        x = a;
    } else {
        x = b;
    }
    cout << x;
}

実行結果

このプログラムはコンパイルできません。
const変数は宣言時に初期化する必要があり、
別のステートメントで代入しようとしているため不正です。

このように、const変数は宣言時以外に値を設定できないため、if~else文での代入は不正となります。

一方、三項演算子を使えば、宣言と初期化を同時に行えるため、正しく動作します。

三項演算子で書いた場合(正しく動作する例)

#include<iostream>
using namespace std;
main() {
    int a = 10, b = 20;
    const int x = (a < b) ? a : b;
    cout << x;
}

実行結果

10

まとめ

  • 三項演算子「条件 ? 値1 : 値2」は式として評価されるため、宣言時の初期化に使用できる。
  • if~else文はステートメントであり、値を返さないため、const変数の宣言後の代入には使えない。
  • 単純な条件分岐で値を選ぶ場合は、三項演算子の方が簡潔に書ける。

このように、三項演算子とif~else文はほぼ同じ役割を果たしますが、「式」として扱えるかどうかという違いがあり、特にconst変数の初期化などでは三項演算子が必須となる場面があります。用途に応じて適切に使い分けましょう。

  1. Linux向けC++開発に最適なIDEのおすすめ6選

    大規模なプロジェクトをテキストエディタだけで管理するのは容易ではありません。そうしたケースではIDE(統合開発環境)を活用することで、生産性が向上し、フラストレーションも大幅に軽減されるでしょう。IDEにはさまざまな種類があり、自分のニーズに合ったものを選ぶことが重要です。「Linux上のC++開発において唯一のベスト」と呼べるIDEは存在せず、賢くツールを見極める必要があります。ここでは、人気が高く、編集部のおすすめでもあるLinux向けIDEを紹介します。Linuxで使えるC++向けIDE おすすめ6選1. NetBeansNetBeansは、C/C++をはじめ多くのプログラミング言語に対

  2. C#の三項演算子(条件演算子)の使い方を解説

    C#における三項演算子は、条件演算子とも呼ばれる演算子です。3つのオペランドを受け取り、ブール式(真偽値)を評価した結果に応じて、いずれか一方の値を返します。if-else文を1行で簡潔に記述できるため、条件分岐のコードを読みやすくしたい場面でよく使われます。三項演算子の基本構文b = (a == 1) ? 20 : 30;この式の動作は以下のとおりです。最初のオペランド (a == 1) の評価結果がtrue(真)の場合 → 2番目のオペランド 20 が返される最初のオペランドの評価結果がfalse(偽)の場合 → 3番目のオペランド 30 が返されるサンプルプログラム実際に三項演算子を使っ