C++ で条件演算子を使用する
この記事では、C++ 条件演算子の利用方法について説明します。
C++ の rvalue
式として条件演算子を使用する
一般的な算術演算子、論理演算子、および代入演算子とは別に、C++ にはいくつかの特別な演算子があり、そのうちの 1つは条件付き三項演算子です。三項は、演算子が 3つのオペランドを取ることを意味します。if-else
ステートメントと同様に機能するため、条件演算子と呼ばれます。演算子の形式は E1 ? E2 : E3
。ここで、最初のオペランドは if
条件として扱うことができ、評価されて bool
値に変換されます。
bool
値が true
の場合、次の式(E2
)が評価され、その副作用が発生します。それ以外の場合、3 番目の式(E3
)はその副作用で評価されます。この演算子を rvalue
式として使用して、条件付きで変数に値を割り当てることができることに注意してください。次のサンプルコードでは、ユーザー入力から整数を読み取り、条件演算子の E1
オペランドを表す比較式 input > 10
を評価します。変数 n
には、E1
が true
の場合にのみ input
値が割り当てられます。
#include <iostream>
#include <string>
using std::cin;
using std::cout;
using std::endl;
using std::string;
int main() {
int input;
cout << "Enter a single integer: ";
cin >> input;
int n = input > 10 ? input : 10;
cout << "n = " << n << endl;
return EXIT_SUCCESS;
}
出力:
Enter a single integer: 21
n = 21
C++ の lvalue
式として条件演算子を使用する
または、三項演算子を左辺値
式として使用して、代入演算が実行される変数名を条件付きで選択することもできます。変数名は 2 番目と 3 番目のオペランドとしてのみ指定することに注意してください。ただし、一般的には、外部の副作用がある cout
などの式を指定できます。これらのエフェクトは通常どおり実行されます。
#include <iostream>
#include <string>
using std::cin;
using std::cout;
using std::endl;
using std::string;
int main() {
int input;
cout << "Enter a single integer: ";
cin >> input;
int n = input > 10 ? input : 10;
cout << "n = " << n << endl;
int m = 30;
(n == m ? n : m) = (m * 10) + 2;
cout << "m = " << m << endl;
return EXIT_SUCCESS;
}
出力:
Enter a single integer: 21
n = 21
m = 302
三項演算子の別のユースケースは、class
定義にあります。次のコードサンプルは、このようなシナリオを示しています。このシナリオでは、単一リンクリストのノードに類似した MyClass
構造の再帰コンストラクターを実装しました。この場合、コンストラクター呼び出しを 2 番目のオペランドとして指定し、next
引数で呼び出し、node.next
が false
値に評価されるまで再帰呼び出しスタックを続行します。後者は、node.next
ポインタが nullptr
の場合にのみ当てはまります。
#include <iostream>
#include <string>
struct MyClass {
MyClass* next;
int data;
MyClass(const MyClass& node)
: next(node.next ? new MyClass(*node.next) : nullptr), data(node.data) {}
MyClass(int d) : next(nullptr), data(d) {}
~MyClass() { delete next; }
};
int main() { return EXIT_SUCCESS; }