Äquivalenz würde ich nicht unterschreiben, aber eine sehr nahe Verwandschaft (zumindest in C++), ja.
Du bringst da, denke ich einiges durcheinander. C++ kennt kein control flow.
Nur weil etwas 2 von 3 Argumenten auswertet heisst das nicht, dass es ein statement ist. Ansonsten wäre das hier ja auch eins:
|
C-/C++-Quelltext
|
1
|
int max (int n1, int n2) {/*...*/}
|
Der wichtige Unterschied von Anweisungen (statements; if, switch usw.) und Ausdrücken (expressions; ?: , + usw. ) ist, dass eine Anweisung keinen Wert hat und wo auch nichts berechnet wird. Ausdrücke haben Werte und stellen eine Art Berechnung dar.
Um mal ein paar Beispiele zu machen:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
|
int n; // deklaration statement
n = 2+2; // 2+2 ist eine expression generiert durch den + Operator, aber
// das ganze ist ein expression statement, also ein Ausdruck wo der Wert der Berechnung
// weggeworfen wird
if ( n == 2 ){/**/} // if statement mit der expression (n==2)
// merke das if hat keinen Wert und berechnet auch nichts
int m = n==2 ? 5:1; // ?: expression evaluiert hier zu 1 und steht für eine Berechnung da
|
Ich hoffe es ist klar geworden.
Und um das noch klarzustellen: Es geht lange nicht mehr darum den ?: Operator zu verstehen, sondern um die Definition was es ist und was es eben nicht ist. Um sich das verhalten klarzumachen ist die if/else Sache sicher geeignet und ich mache das eigentlich auch so, aber es ist wichtig die Begriffe und und Unterschiede zu kennen.