为什么这段代码在VS中编译? (&ndquo; extra”逗号)

下面的行在for循环中。如果方法失败,则需要中断。 CATEGORY_1是一个枚举。我将此枚举添加为AddToList方法的新参数,并带有默认值。如果你仔细看下面,我实际上错误地把逗号和枚举放在函数的参数列表之外。这与VS2010完美匹配。所以我很难找到为该参数而不是CATEGORY_1传递的默认值。 有谁知道为什么这成功了?
if (! AddToList(obj1, (unsigned int) Val), CATEGORY_1)
{
    break;
}
    
已邀请:
在C ++中,逗号不仅仅是一个分隔符;它也可以是一个运营商。那个逗号是一个运算符。逗号运算符计算第一个表达式,丢弃结果,然后计算第二个表达式并生成结果。
!AddToList(obj1, (unsigned int) Val) , CATEGORY_1
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^   ^^^^^^^^^^
First expression                       Second expression
[当然,逗号运算符与大多数其他运算符一样,可以重载,如果在这里使用重载,则语义可能不同。这是内置逗号运算符的行为。]     
逗号运算符将简单地丢弃第一个表达式的结果并评估第二个表达式的值。所以在这种情况下,如果
bool(CATEGORY_1) == true
那么
if
永远不会评估;相反,如果
bool(CATEGORY_1) == false
那么
if
总会评估。在任何情况下,返回的是什么都不重要。     

要回复问题请先登录注册