c++ - 为什么这段代码在 VS 中编译? ("extra"逗号)

标签 c++ comma-operator

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

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

最佳答案

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

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

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

关于c++ - 为什么这段代码在 VS 中编译? ("extra"逗号),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5629482/

相关文章:

c - 错误的数组索引不会导致错误

c++ - 将 ofstream 分配给 ostream

c++ - 为什么在 C 和 C++ 中应避免使用 system() 函数?

c++ - 将 native WebRTC 应用程序与 Visual Studio 链接

c++ - 作为 std::vector 包装器的用户定义容器应该继承还是包含 std::vector?

c++ - 逗号运算符的用法

c++ - 逗号运算符的左右操作数无效(警告)

c++ - <cstdint> 与 <stdint.h>

c - 逗号运算符 , 的作用是什么?

c - 为什么 fun 函数的返回值是 8 而不是 7?