Heim >Backend-Entwicklung >C++ >Ist das Ergebnis des ternären Operators ein L-Wert oder ein R-Wert?

Ist das Ergebnis des ternären Operators ein L-Wert oder ein R-Wert?

Susan Sarandon
Susan SarandonOriginal
2024-12-09 20:50:13332Durchsuche

Is the Ternary Operator's Result an Lvalue or an Rvalue?

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:

  • Wenn beide Operanden L-Werte desselben Typs sind, ist das Ergebnis ein L-Wert dieses Typs.
  • Wenn beide Operanden R-Werte sind, ist das Ergebnis ein Pr-Wert (ein vom Typ gelöschter R-Wert).
  • Wenn ein Operand ein L-Wert und der andere ein L-Wert ist rvalue, das Ergebnis ist ein rvalue.

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn