有人能解释一下这个c++中的逗号操作符短路的例子吗?



有人能解释一下这个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)); 

逗号操作符不短路。计算左操作数,忽略结果,然后计算右操作数。

bIsTRUEtrue,因为赋值的右操作数是true

bIsFALSEfalse,因为(true, false)true,忽略结果,然后求出false

bIsAlsoTRUEtrue,因为((true, false), true)(true, false),忽略结果,然后求出true

相关内容

  • 没有找到相关文章

最新更新