6

可能重复:
为什么 3,758,096,384 << 1 给出 768

今天我发现下面的代码用 gcc 编译:

#include <iostream>

int main()
{
    int x = (23,34);

    std::cout << x << std::endl; // prints 34

    return 0;
}

为什么会这样编译?是什么意思 (..., ...)?

4

2 回答 2

14

在表达式中,逗号运算符将计算其所有操作数并返回最后一个。这就是为什么在您的示例中,x等于 34。

于 2012-11-03T12:55:59.897 回答
8

在 C++ 中,,is 是一个运算符,因此(23,34)是一个表达式,就像(23+34)是一个表达式一样。前者,是算子,后者+是算子。

因此,表达式(23,34)计算为最右边的操作数,34这就是您的代码输出的原因34

我还想提一下,,它不是函数调用中的运算符:

int m = max(a,b);

这里,充当参数的分隔符。它不充当操作员。因此,您将两个参数传递给函数。

然而,

int m = max((a,b), c);

这里第一个,是运算符,第二个,是分隔符。所以你仍然向函数传递两个参数,而不是三个,它等价于:

int m = max(b, c); //as (a,b) evaluates to b

希望有帮助。:-)

于 2012-11-03T12:58:43.350 回答