Typsystem und Wertkategorie im Bedingungsoperator (?:)
In C wird der Bedingungsoperator (?:) zu a ausgewertet Wert eines bestimmten Typs und einer bestimmten Wertkategorie, die definiert, ob er auf ein Objekt im Speicher verweisen kann oder nicht.
Im ersten Beispiel vorausgesetzt:
int x = 1; int y = 2; (x > y ? x : y) = 100;
Sowohl x als auch y sind int-Variablen und die Bedingung x > y ist falsch. Daher wird y der Wert 100 zugewiesen. Da der Typ beider Operanden gleich ist, wird der bedingte Ausdruck selbst zu einem L-Wert, was bedeutet, dass er zugewiesen werden kann.
Im zweiten Beispiel gilt jedoch:
int x = 1; long y = 2; (x > y ? x : y) = 100;
x ist ein int und y ist ein long, wodurch die Typen der Operanden unterschiedlich sind. Um x und y zu vergleichen, ist eine Konvertierung erforderlich, die dazu führt, dass der bedingte Ausdruck zu einem R-Wert und nicht zu einem L-Wert wird. Da ein R-Wert nicht zugewiesen werden kann, ist die Zuweisung in diesem Fall ungültig.
Zusammenfassend lässt sich sagen, dass ein bedingter Ausdruck ein L-Wert ist, wenn der zweite und dritte Operand L-Werte desselben Typs sind, was eine Zuweisung zum Ergebnis ermöglicht. Wenn sie unterschiedliche Typen haben, wird der bedingte Ausdruck zu einem R-Wert, dem nicht zugewiesen werden kann.
Das obige ist der detaillierte Inhalt vonWie bestimmt der bedingte Operator (?:) von C den L-Wert oder den R-Wert basierend auf Operandentypen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!