Wie verwende ich den bedingten (ternären) Operator?
Lesezeit: 2 Minuten
Robin Rodricks
Ich habe mich immer gefragt, wie man das schreibt "A ? B : C" Syntax in einer C++-kompatiblen Sprache.
Ich denke, es funktioniert ungefähr so: (Pseudocode)
If A > B
C = A
Else
C = B
Kann mir bitte ein erfahrener C++-Programmierer helfen?
lc.
Es funktioniert so:
(condition) ? true-clause : false-clause
Es wird am häufigsten in Zuweisungsoperationen verwendet, obwohl es auch andere Verwendungen hat. Der ternäre Operator ? ist eine Möglichkeit, eine if-else-Klausel abzukürzen, und wird in anderen Sprachen auch als unmittelbare if-Anweisung bezeichnet (IIf(condition,true-clause,false-clause) in VB zum Beispiel).
Zum Beispiel:
bool Three = SOME_VALUE;
int x = Three ? 3 : 0;
ist das gleiche wie
bool Three = SOME_VALUE;
int x;
if (Three)
x = 3;
else
x = 0;
Wenn x in Ihren Beispielen eine Konstante int wäre, wäre die ternäre Version die einzige Option, die kompiliert wird.
– Drew Dormann
25. Dezember 2008 um 21:48 Uhr
Wäre es nicht besser, Drei zu initialisieren?
– Jonathan Leffler
26. Dezember 2008 um 7:41 Uhr
Shmoopty – Sehr wahr, denn Sie können eine Konstante nur initialisieren, wenn sie deklariert ist. Jonathan – Ja, ja, das würde es. Bearbeitet. Vielleicht hätte ich stattdessen “//Three is a bool” machen sollen.
– lc.
26. Dezember 2008 um 8:18 Uhr
Es funktioniert so:
expression ? trueValue : falseValue
Was im Grunde bedeutet, dass wenn expression zu true ausgewertet wird, wird trueValue zurückgegeben oder ausgeführt, und falseValue wird zurückgegeben oder ausgewertet, wenn dies nicht der Fall ist.
Denken Sie daran, dass trueValue und falseValue nur dann ausgewertet und ausgeführt werden, wenn der Ausdruck wahr bzw. falsch ist. Dieses Verhalten wird als Kurzschluss bezeichnet.
In c++ gibt es keinen tatsächlichen if-Teil davon. Er wird als ternärer Operator bezeichnet. Es wird wie folgt verwendet: ? : ; Für dein obiges Beispiel würde das so aussehen:
Ich nehme an, du meinst Sachen wie a = b ? c : d, wobei b die Bedingung ist, c der Wert ist, wenn b wahr ist, und d der Wert ist, wenn b falsch ist.
ich würde sagen die ? ist eine Abkürzung. Einige “Hard-Core”-Programmierer neigen jedoch dazu zu sagen, schreiben Sie es auf lange Sicht, damit die Leute in zukünftigen Fällen Code leicht lesen und ändern können.
Zum Beispiel, wenn Sie schreiben
int a = b<c ? b : c;
Einige Leute behaupten, es sei klarer zu schreiben:
if(b<c)
a = b;
else
a = c;
Denn in zukünftigen Fällen können sich Menschen damit anstecken. Natürlich ist ein einfaches b
Ihr Beispiel ist das einfachste für typische Anwendungsfälle. Der korrekte Begriff ist “ternäre Operatoren”, und sie sind sehr einfach zu verstehen und verwenden in vielen Sprachen eine ähnliche Syntax. In R wäre zum Beispiel die gleiche Aussage a = ifelse(b<c, b, c). In PHP wäre es $a = ($b<$c) ? b : c;. Ich würde ternäre Operatoren für einfache Fälle bevorzugen, wie z. B. einzeilige Anweisungen. Für mehrzeilige Anweisungen würde ich den traditionellen Weg für eine sauberere logische Struktur verwenden.
– Adam Erickson
9. März 2018 um 5:36 Uhr
Robin Hsu
Niemand scheint zu erwähnen, dass ein Ergebnis eines Bedingungsoperatorausdrucks ein L-Wert in C++ sein kann (aber nicht in C). Der folgende Code lässt sich in C++ kompilieren und läuft gut:
int a, b;
bool cond;
a=1; b=2; cond=true;
(cond? a : b) = 3;
cout << a << "," << b << endl;
Das obige Programm gibt 3, 2 aus
Wenn a und b jedoch von unterschiedlichem Typ sind, wird es nicht funktionieren. Der folgende Code gibt einen Compilerfehler aus:
int a;
double b;
bool cond;
a=1; b=2; cond=true;
(cond? a : b) = 3;
cout << a << "," << b << endl;
Ihr Beispiel ist das einfachste für typische Anwendungsfälle. Der korrekte Begriff ist “ternäre Operatoren”, und sie sind sehr einfach zu verstehen und verwenden in vielen Sprachen eine ähnliche Syntax. In R wäre zum Beispiel die gleiche Aussage a = ifelse(b<c, b, c). In PHP wäre es $a = ($b<$c) ? b : c;. Ich würde ternäre Operatoren für einfache Fälle bevorzugen, wie z. B. einzeilige Anweisungen. Für mehrzeilige Anweisungen würde ich den traditionellen Weg für eine sauberere logische Struktur verwenden.
– Adam Erickson
9. März 2018 um 5:36 Uhr
HARTER BAJPAI
ES IST GANZ EINFACH. ES IST DIE BASISSYNTAX: Ausdruck1?Ausdruck2:Ausdruck3;
Wenn Ausdruck 1 wahr ist, gilt Ausdruck 2, andernfalls gilt Ausdruck 3.
Beispiel:
hey=24>2?24:34;
hier, da die Bedingung wahr ist, wird ihr der Wert 24 zugewiesen. Wenn es falsch war, wird ihm 34 zugewiesen
9901300cookie-checkWie verwende ich den bedingten (ternären) Operator?yes