L'opérateur ternaire (?:) peut produire des résultats variables selon les types de ses opérandes. C'est souvent source de confusion, notamment en ce qui concerne les références lvalue et rvalue.
Dans le premier exemple, la condition est évaluée pour déterminer si x est supérieur à y. Si vrai, le résultat de l’expression est x, qui est une référence lvalue. Cela nous permet de lui attribuer une valeur via l'opérateur d'affectation (=) dans la ligne suivante.
int x = 1; int y = 2; (x > y ? x : y) = 100; // Assigns 100 to x
Cependant, dans le deuxième exemple, les deuxième et troisième opérandes ont des types différents (int et long) . Pour résoudre ce problème, le compilateur doit convertir l’un des opérandes pour qu’il corresponde à l’autre. Cela produirait une rvalue, et non une lvalue, comme résultat de l'expression.
int x = 1; long y = 2; (x > y ? x : y) = 100; // Compilation error: lvalue required for assignment
La distinction clé est que l'opérateur ternaire exige que les deux opérandes soient des lvalues du même type pour que l'expression résultante soit une lvalue. Le non-respect de cette condition entraîne une erreur de compilation lors de la tentative d'attribution d'une valeur à l'expression.
Ce comportement souligne l'importance de comprendre les catégories de valeurs en C . Les valeurs Lvalues et rvalues déterminent si une expression peut être la cible d'une opération d'affectation, comme dans le cas de l'opérateur ternaire. Une compréhension claire de ces concepts est cruciale pour écrire du code C correct et efficace.
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!