C++の三項演算子を完全ガイド!6つの実例で完全マスター

C++の三項演算子を徹底解説するイメージC++
この記事は約10分で読めます。

 

【サイト内のコードはご自由に個人利用・商用利用いただけます】

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

基本的な知識があればカスタムコードを使って機能追加、目的を達成できるように作ってあります。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10,000時間以上』を凌駕する現役のプログラマチームによって監修されています。

サイト内のコードを共有する場合は、参照元として引用して下さいますと幸いです

※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)

はじめに

C++プログラミングを学ぶ上で、効率的かつ強力なツールの一つが三項演算子です。

この記事では、C++における三項演算子の基本から応用までを、初心者でも理解しやすいように丁寧に解説していきます。

プログラミングでは、状況に応じて最適なコードを書くことが求められます。三項演算子は、そのような場面で大いに役立つツールです。

この演算子の使用法をマスターすることで、C++コードの書き方において一層の理解を深めることができるでしょう。

●C++と三項演算子の基本

C++言語における三項演算子は、簡潔な条件判断を可能にします。

これは、条件式が真(true)か偽(false)かに基づいて、二つの値のうちの一つを選択するために使用されます。

三項演算子は、一般的なif-else文よりも短いコードで同様の機能を実現できるため、プログラムをシンプルかつ読みやすく保つことができます。

○三項演算子とは何か?

三項演算子は、条件式 ? 真の場合の値 : 偽の場合の値という形式で書かれます。

ここで、「条件式」は真偽を評価される式、「真の場合の値」は条件式が真(true)である場合に返される値、「偽の場合の値」は条件式が偽(false)である場合に返される値を指します。

この演算子は、特に値を返す必要がある場合や、一行で簡潔に条件に基づく処理を記述したい場合に有用です。

○三項演算子の構文と基本的な使い方

三項演算子の基本的な構文は非常にシンプルです。

まず、条件式を書きます。

この式が真(true)を返せば、三項演算子は「真の場合の値」を返し、偽(false)を返せば「偽の場合の値」を返します。

たとえば、ある変数が特定の値より大きいかどうかをチェックし、その結果に基づいて異なる文字列を返す簡単な例を考えてみましょう。

int number = 10;
std::string result = (number > 5) ? "大きい" : "小さい";
std::cout << result << std::endl;

このコードでは、number 変数が5より大きいかどうかをチェックしています。

もしnumberが5より大きければ、resultに”大きい”が代入され、そうでなければ”小さい”が代入されます。

最終的にresultの値がコンソールに出力されます。

●三項演算子の詳細な使い方

C++の三項演算子は、そのシンプルさから多様な状況で使われます。

基本的な使い方を理解した後、より複雑なシナリオや効率的なコードの書き方に応用することができます。

ここでは、三項演算子の詳細な使い方について説明し、実際のコード例を見ていきましょう。

○サンプルコード1:簡単な条件判断

三項演算子は、単純な条件判断に非常に有効です。

例えば、数値が特定の範囲内にあるかどうかを判断する場合に使うことができます。

下記のコードは、ある数値が0以上10未満かどうかをチェックし、結果に応じて異なるメッセージを出力します。

int num = 8;
std::string message = (num >= 0 && num < 10) ? "範囲内です" : "範囲外です";
std::cout << message << std::endl;

このコードでは、num変数が0以上10未満の場合、「範囲内です」と出力され、そうでない場合には「範囲外です」と出力されます。

三項演算子を使用することで、if-else文を使うよりもコンパクトに条件判断を行うことができます。

○サンプルコード2:変数への代入

三項演算子は変数への代入にも便利です。

例えば、ユーザーの入力に基づいて異なる値を変数に代入する場面で役立ちます。

下記の例では、ユーザーからの入力が特定の条件を満たすかどうかに応じて、変数に異なる値を代入します。

int userInput = 5;
int result = (userInput > 10) ? userInput * 2 : userInput / 2;
std::cout << "結果: " << result << std::endl;

このコードでは、ユーザーが入力した値が10より大きい場合はその値を2倍にし、そうでない場合は2で割った値をresult変数に代入します。

●三項演算子の応用例

三項演算子は、その柔軟性により、様々な応用が可能です。

基本的な使い方を把握した後は、より複雑なシナリオに対応するためにこの演算子を活用できます。

ここでは、三項演算子の応用例をいくつか紹介し、それらのシナリオでの使い方を解説します。

○サンプルコード3:ネストされた三項演算子

三項演算子は、他の三項演算子と組み合わせることで、より複雑な条件判断を1行で行うことができます。

これを「ネストされた三項演算子」と呼びます。

下記の例では、2つの条件を評価し、それぞれに応じた異なる結果を返します。

int a = 5, b = 10;
std::string result = (a > b) ? "aはbより大きい" : (a == b) ? "aとbは等しい" : "aはbより小さい";
std::cout << result << std::endl;

このコードでは、まずa > bの条件を評価し、その結果に基づいて”大きい”、”等しい”、”小さい”のいずれかの文字列をresultに代入します。

三項演算子をネストすることで、複数の条件を簡潔に評価できます。

○サンプルコード4:複雑な条件式の簡略化

三項演算子は、複雑な条件式を簡略化するのにも役立ちます。

例えば、複数の変数の値に基づいて、特定の処理を実行する場合に有効です。

下記の例では、3つの変数の値を比較して、最も小さい値を見つけるために三項演算子を使用しています。

int x = 4, y = 9, z = 7;
int smallest = (x < y) ? ((x < z) ? x : z) : ((y < z) ? y : z);
std::cout << "最小値: " << smallest << std::endl;

このコードでは、まずxyを比較し、小さい方とzを比較して、最も小さい値をsmallestに代入します。

三項演算子を用いることで、if-else文を複数使うよりも簡潔に条件を記述できます。

●三項演算子の注意点と対処法

三項演算子は非常に便利なツールですが、使用する際にはいくつかの注意点があります。

適切に使用すればコードの可読性と効率が向上しますが、誤用すると逆効果になる可能性があります。

ここでは、三項演算子の使用における主な注意点とその対処法を説明します。

○可読性の確保

三項演算子はコードを簡潔にすることができますが、過度に使用するとコードの可読性が低下することがあります。

特に、ネストされた三項演算子は読みづらくなりがちです。

可読性を維持するためには、三項演算子をシンプルな条件判断に限定して使用し、複雑なロジックは通常のif-else文を使用して表現することが望ましいです。

例えば、下記のネストされた三項演算子は読みづらいと感じられるかもしれません。

int a = 10, b = 20, c = 30;
std::string result = (a > b) ? ((a > c) ? "aが最大" : "cが最大") : ((b > c) ? "bが最大" : "cが最大");

この場合、if-else文を使用して同じロジックを表現する方が読みやすくなります。

○パフォーマンスへの影響

三項演算子の使用は、一般的にパフォーマンスに大きな影響を与えません。

しかし、条件式や三項演算子の各部分で高コストの操作を行っている場合、パフォーマンスに影響を及ぼす可能性があります。

三項演算子を使用する際は、条件式が複雑でないこと、そして実行される各部分のコードが効率的であることを確認することが重要です。

例えば、下記のような三項演算子は、条件式が非常に単純で、パフォーマンスに影響を与えることはほとんどありません。

int number = 15;
std::string result = (number % 2 == 0) ? "偶数" : "奇数";

●三項演算子のカスタマイズ方法

C++の三項演算子は、その基本的な機能を超えて、さまざまな方法でカスタマイズして使用することができます。

ここでは、ユーザー定義関数やラムダ式と組み合わせることで、三項演算子の応用範囲を広げる方法について説明します。

○サンプルコード5:ユーザー定義関数との組み合わせ

三項演算子は、ユーザー定義関数と組み合わせて使用することができます。

これにより、条件に応じて異なる関数を呼び出すことが可能になります。

下記の例では、条件に応じて異なる計算を行う2つの関数を定義し、三項演算子を使用してどちらの関数を呼び出すかを決定しています。

#include <iostream>

// 2つの数の和を返す関数
int add(int a, int b) {
    return a + b;
}

// 2つの数の差を返す関数
int subtract(int a, int b) {
    return a - b;
}

int main() {
    int x = 10, y = 5;
    bool condition = true;

    // 条件に応じてadd関数またはsubtract関数を呼び出す
    int result = condition ? add(x, y) : subtract(x, y);
    std::cout << "結果: " << result << std::endl;

    return 0;
}

このコードでは、conditiontrueの場合にadd関数を、そうでない場合にsubtract関数を呼び出しています。

このように三項演算子を使用することで、コードの柔軟性と可読性を向上させることができます。

○サンプルコード6:ラムダ式との組み合わせ

C++11以降では、三項演算子をラムダ式と組み合わせることもできます。

ラムダ式を使用すると、条件に応じて異なるコードブロックを実行することが可能になります。

下記の例では、ラムダ式を使って条件に応じて異なる処理を行う方法を表しています。

#include <iostream>

int main() {
    int a = 10, b = 20;
    bool condition = (a > b);

    // ラムダ式を使用して条件に応じた処理を行う
    auto result = condition ? 
                  [&]() { return a * 2; } : 
                  [&]() { return b * 2; };

    std::cout << "結果: " << result() << std::endl;

    return 0;
}

このコードでは、conditiontrueの場合にa * 2を、そうでない場合にb * 2を計算しています。

ラムダ式を使うことで、より複雑な処理を三項演算子内で行うことができます。

まとめ

この記事を通じて、C++における三項演算子の基本的な使い方から応用、カスタマイズ方法までを詳しく解説しました。

三項演算子は、その簡潔さと柔軟性から多くのプログラミングシナリオで有用ですが、使用する際には可読性を損なわないよう注意が必要です。

適切に使えば、コードの効率と可読性を大幅に向上させることができるでしょう。

このガイドを参考にしながら、C++プログラミングのスキルを一段階引き上げていただければ幸いです。