2

下面的行在 for 循环内。如果方法失败,则需要中断。CATEGORY_1 是一个枚举。我将此枚举添加为具有默认值的 AddToList 方法的新参数。如果你仔细看下面,我实际上犯了将逗号和枚举放在函数参数列表之外的错误。这与 VS2010 编译得非常好。因此,我很难发现为该参数而不是 CATEGORY_1 传递了默认值。有谁知道为什么会成功?

if (! AddToList(obj1, (unsigned int) Val), CATEGORY_1)
{
    break;
}
4

2 回答 2

7

在 C++ 中,逗号不仅仅是分隔符;它也可以是运算符。那个逗号是一个运算符。逗号运算符计算第一个表达式,丢弃结果,然后计算第二个表达式并产生它的结果。

!AddToList(obj1, (unsigned int) Val) , CATEGORY_1
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^   ^^^^^^^^^^
First expression                       Second expression

[当然,逗号运算符和大多数其他运算符一样,可以重载,如果在这里使用重载,语义可能会有所不同。这是内置逗号运算符的行为。]

于 2011-04-12T01:39:59.747 回答
1

逗号运算符将简单地丢弃第一个表达式的结果并计算第二个表达式的值。所以在这种情况下, if bool(CATEGORY_1) == truethen theif永远不会评估;相反,如果bool(CATEGORY_1) == falsethenif将始终评估。在这两种情况下,返回什么都无关紧要AddToList

于 2011-04-12T01:40:49.677 回答