Maison >développement back-end >C++ >Le résultat de l'opérateur ternaire est-il une Lvalue ou une Rvalue ?

Le résultat de l'opérateur ternaire est-il une Lvalue ou une Rvalue ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-09 20:50:13332parcourir

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

Opérateur conditionnel ternaire et son résultat Lvalue ou Rvalue

L'opérateur ternaire/conditionnel ('?:') fournit une syntaxe abrégée pour sélectionner une des deux expressions basées sur une condition. Comprendre le type de résultat de cet opérateur est crucial pour diverses tâches de programmation.

Expression conditionnelle en tant que Lvalue

L'opérateur conditionnel renvoie une lvalue lorsque les deuxième et troisième opérandes sont des lvalues du même type. Ceci est observé lorsque les deux opérandes (x et y) dans le code suivant sont des entiers :

int x = 1;
int y = 2;
(x > y ? x : y) = 100; // Assignment is allowed since the result is an lvalue

Dans ce cas, l'expression conditionnelle (x > y ? x : y) est une lvalue, qui permet l'affectation ultérieure à 100.

Expression conditionnelle comme Rvalue

Cependant, lorsque les deuxième et troisième opérandes ont des types différents, l'expression conditionnelle devient une rvalue. Ceci est évident dans le code suivant :

int x = 1;
long y = 2;
(x > y ? x : y) = 100; // Error: Assignment is not allowed for rvalues

En raison de la conversion implicite de x en long pour correspondre au type de y, l'expression conditionnelle devient une rvalue. Étant donné que les rvalues ​​ne sont pas modifiables, l'opération d'affectation échoue.

Détermination du type de résultat

Le type et la catégorie de valeur d'une expression conditionnelle sont déterminés au moment de la compilation. Il est conforme aux règles suivantes :

  • Si les deux opérandes sont des valeurs du même type, le résultat est une valeur de ce type.
  • Si les deux opérandes sont des valeurs, le résultat est une prvalue (une rvalue effacée par le type).
  • Si un opérande est une lvalue et l'autre est une rvalue, le résultat est une rvalue.

La compréhension de ces règles garantit une utilisation efficace de l'opérateur ternaire/conditionnel.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn