C++ で条件演算子を使用する

胡金庫 2023年10月12日
  1. C++ の rvalue 式として条件演算子を使用する
  2. C++ の lvalue 式として条件演算子を使用する
C++ で条件演算子を使用する

この記事では、C++ 条件演算子の利用方法について説明します。

C++ の rvalue 式として条件演算子を使用する

一般的な算術演算子、論理演算子、および代入演算子とは別に、C++ にはいくつかの特別な演算子があり、そのうちの 1つは条件付き三項演算子です。三項は、演算子が 3つのオペランドを取ることを意味します。if-else ステートメントと同様に機能するため、条件演算子と呼ばれます。演算子の形式は E1 ? E2 : E3。ここで、最初のオペランドは if 条件として扱うことができ、評価されて bool 値に変換されます。

bool 値が true の場合、次の式(E2)が評価され、その副作用が発生します。それ以外の場合、3 番目の式(E3)はその副作用で評価されます。この演算子を rvalue 式として使用して、条件付きで変数に値を割り当てることができることに注意してください。次のサンプルコードでは、ユーザー入力から整数を読み取り、条件演算子の E1 オペランドを表す比較式 input > 10 を評価します。変数 n には、E1true の場合にのみ 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.nextfalse 値に評価されるまで再帰呼び出しスタックを続行します。後者は、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; }
著者: 胡金庫
胡金庫 avatar 胡金庫 avatar

DelftStack.comの創設者です。Jinku はロボティクスと自動車産業で8年以上働いています。自動テスト、リモートサーバーからのデータ収集、耐久テストからのレポート作成が必要となったとき、彼はコーディングスキルを磨きました。彼は電気/電子工学のバックグラウンドを持っていますが、組み込みエレクトロニクス、組み込みプログラミング、フロントエンド/バックエンドプログラミングへの関心を広げています。

LinkedIn Facebook

関連記事 - C++ Operator