Question

Quelqu'un peut-il expliquer cet exemple de court-circuit d'opérateur virgule C ++?

bIsTRUE     = true, false, true;
bIsFALSE    = (true, false), true;
bIsAlsoTRUE = ((true, false), true);

Était-ce utile?

La solution

L'opérateur virgule a une priorité inférieure à l'affectation, donc ceux-ci sont analysés comme

(bIsTRUE     = true), false, true;     
(bIsFALSE    = (true, false)), true;   
(bIsAlsoTRUE = ((true, false), true)); 

L'opérateur virgule ne court-circuite pas.Il évalue son opérande gauche, ignore le résultat, puis évalue son opérande droit.

bIsTRUE est true car l'opérande droit de l'affectation est true.

bIsFALSE est false car (true, false) évalue true, ignore le résultat, puis évalue et donne false.

bIsAlsoTRUE est true car ((true, false), true) évalue (true, false), ignore le résultat, puis évalue et donne true.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top