Ternärer bedingter Operator und sein Ergebnis L-Wert oder R-Wert
Der ternäre/bedingte Operator ('?:') bietet eine Kurzsyntax für die Auswahl einer von zwei Ausdrücken basierend auf einer Bedingung. Das Verständnis des Ergebnistyps dieses Operators ist für verschiedene Programmieraufgaben von entscheidender Bedeutung.
Bedingter Ausdruck als L-Wert
Der bedingte Operator gibt einen L-Wert zurück, wenn der zweite und dritte Operand L-Werte sind vom gleichen Typ. Dies wird beobachtet, wenn beide Operanden (x und y) im folgenden Code ganze Zahlen sind:
int x = 1; int y = 2; (x > y ? x : y) = 100; // Assignment is allowed since the result is an lvalue
In diesem Fall ist der bedingte Ausdruck (x > y ? x : y) ein L-Wert, der ermöglicht die anschließende Zuordnung zu 100.
Bedingter Ausdruck als R-Wert
Wenn der zweite und dritte Operand jedoch unterschiedliche Typen haben, wird der bedingte Ausdruck zu einem R-Wert. Dies wird im folgenden Code deutlich:
int x = 1; long y = 2; (x > y ? x : y) = 100; // Error: Assignment is not allowed for rvalues
Aufgrund der impliziten Konvertierung von x in long, um dem Typ von y zu entsprechen, wird der bedingte Ausdruck zu einem R-Wert. Da R-Werte nicht änderbar sind, schlägt die Zuweisungsoperation fehl.
Bestimmen des Ergebnistyps
Der Typ und die Wertkategorie eines bedingten Ausdrucks werden zur Kompilierungszeit bestimmt. Es entspricht den folgenden Regeln:
Das Verständnis dieser Regeln stellt eine effektive Verwendung des ternären/bedingten Operators sicher.
Das obige ist der detaillierte Inhalt vonIst das Ergebnis des ternären Operators ein L-Wert oder ein R-Wert?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!