有人能解释这个C ++逗号运算符短路示例吗?

时间:2011-05-04 00:38:31

标签: c++ boolean operators short-circuiting comma-operator

有人可以解释这个C ++逗号运算符短路示例吗?

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

为什么第二个版本短路并返回 false (至少在MSVC ++中),而其他两个版本不会返回 true

1 个答案:

答案 0 :(得分:28)

逗号运算符的优先级低于赋值,因此将其解析为

(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