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

Adi*_*sak 12 c++ boolean operators short-circuiting comma-operator

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

bIsTRUE     = true, false, true;
bIsFALSE    = (true, false), true;
bIsAlsoTRUE = ((true, false), true);
Run Code Online (Sandbox Code Playgroud)

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

Jam*_*lis 28

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

(bIsTRUE     = true), false, true;     
(bIsFALSE    = (true, false)), true;   
(bIsAlsoTRUE = ((true, false), true)); 
Run Code Online (Sandbox Code Playgroud)

逗号运算符不会短路.它计算左操作数,忽略结果,然后计算其右操作数.

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

bIsFALSEfalse因为(true, false)评估true,忽略结果,然后评估和收益false.

bIsAlsoTRUEtrue因为((true, false), true)评估(true, false),忽略结果,然后评估和收益true.

  • @PeterR.:哪个功能,逗号的优先级低于赋值?`int count = 0; for(Node*p = head; p; p = p-> next,++ count){}`一个不好的例子,但是for循环增量表达式,有时是其他类似的东西,可以使用它. (2认同)