Подтвердить что ты не робот

Может ли кто-нибудь объяснить этот пример короткого замыкания оператора С++?

Может ли кто-нибудь объяснить этот пример короткого замыкания оператора С++?

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

Почему вторая короткозамкнутая версия и возвращает false (по крайней мере, в MSVС++), а две другие версии не возвращают true?

4b9b3361

Ответ 1

Оператор запятой имеет более низкий приоритет, чем присвоение, поэтому они анализируются как

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

Оператор запятой не замыкается. Он оценивает свой левый операнд, игнорирует результат, затем оценивает его правый операнд.

bIsTRUE true, потому что правый операнд присваивания true.

bIsFALSE false, потому что (true, false) оценивает true, игнорирует результат, затем оценивает и дает false.

bIsAlsoTRUE равен true, потому что ((true, false), true) оценивает (true, false), игнорирует результат, затем оценивает и дает true.