Verwenden eines bedingten Operators in C++
-
Verwendung von einen Bedingungsoperator als
rvalue
-Ausdruck in C++ -
Einen bedingten Operator als
lvalue
-Ausdruck in C++ verwenden
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; }
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