Verwenden eines bedingten Operators in C++

Jinku Hu 12 Oktober 2023
  1. Verwendung von einen Bedingungsoperator als rvalue-Ausdruck in C++
  2. Einen bedingten Operator als lvalue-Ausdruck in C++ verwenden
Verwenden eines bedingten Operators in C++

In diesem Artikel wird erläutert, wie Sie einen bedingten C++-Operator verwenden.

Verwendung von einen Bedingungsoperator als rvalue-Ausdruck in C++

Abgesehen von den üblichen arithmetischen, logischen und Zuweisungsoperatoren bietet C++ einige spezielle Operatoren, von denen einer ein bedingter ternärer Operator ist. Ternär impliziert, dass der Operator drei Operanden verwendet. Er wird bedingter Operator genannt, weil er ähnlich wie die Anweisung if-else funktioniert. Der Operator hat die Form E1 ? E2 : E3, wobei der erste Operand als if-Bedingung behandelt werden kann, die ausgewertet und in den bool-Wert umgewandelt wird.

Wenn der Wert bool true ist, wird der folgende Ausdruck (E2) ausgewertet und seine Nebenwirkungen treten auf. Andernfalls wird der dritte Ausdruck (E3) mit seinen Nebenwirkungen ausgewertet. Beachten Sie, dass wir diesen Operator als rvalue-Ausdruck verwenden können, um einer Variablen bedingt einen Wert zuzuweisen. Im folgenden Beispielcode lesen wir eine ganze Zahl aus der Benutzereingabe und werten den Vergleichsausdruck input > 10 aus, der den Operanden E1 im Bedingungsoperator darstellt. Der Variable n wird nur dann der Wert input zugewiesen, wenn E1 wahr ist.

#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;
}

Ausgabe:

Enter a single integer: 21
n = 21

Einen bedingten Operator als lvalue-Ausdruck in C++ verwenden

Alternativ können wir den ternären Operator als lvalue-Ausdruck verwenden, um bedingt einen Variablennamen auszuwählen, für den die Zuweisungsoperation ausgeführt wird. Beachten Sie, dass wir nur die Variablennamen als zweiten und dritten Operanden angeben. Im Allgemeinen können Sie jedoch Ausdrücke wie cout angeben, die externe Nebenwirkungen haben; diese Effekte werden wie gewohnt ausgeführt.

#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;
}

Ausgabe:

Enter a single integer: 21
n = 21
m = 302

Ein weiterer Anwendungsfall für den ternären Operator kann in der class-Definition liegen. Das folgende Codebeispiel demonstriert ein solches Szenario, in dem wir einen rekursiven Konstruktor für eine MyClass-Struktur ähnlich einem Knoten in einer einfach verknüpften Liste implementiert haben. In diesem Fall geben wir als zweiten Operanden den Konstruktoraufruf an, der mit dem Argument next aufgerufen wird, und setzen den rekursiven Aufrufstack fort, bis node.next den Wert false ergibt. Letzteres ist nur der Fall, wenn der Zeiger node.next auf nullptr steht.

#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; }
Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

Verwandter Artikel - C++ Operator