有人能解释一下这个c++逗号操作符短路的例子吗?
bIsTRUE = true, false, true;
bIsFALSE = (true, false), true;
bIsAlsoTRUE = ((true, false), true);
为什么第二个版本短路并返回false(至少在msvc++中),而其他两个版本不返回true?
逗号运算符的优先级低于赋值运算符,因此它们被解析为
(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
。