有人可以解释这个C ++逗号运算符短路示例吗?
bIsTRUE = true, false, true;
bIsFALSE = (true, false), true;
bIsAlsoTRUE = ((true, false), true);
为什么第二个版本短路并返回 false (至少在MSVC ++中),而其他两个版本不会返回 true ?
答案 0 :(得分:28)
逗号运算符的优先级低于赋值,因此将其解析为
(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
。