C++'int x =(anyInt1,anyInt2);' 意思?

pwk*_*wks 6 c++ syntax int

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

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

#include <iostream>

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

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

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

为什么编译?的意义是什么 (..., ...)?

0x4*_*2D2 14

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


Naw*_*waz 8

在C++中,,是一个运算符,因此(23,34)就像(23+34)表达式一样.在前者中,,是运营商,而在后者中,+是运营商.

因此表达式(23,34)求值到最右边的操作数,34这就是代码输出的原因34.

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

int m = max(a,b);
Run Code Online (Sandbox Code Playgroud)

这里,作为参数的分隔符.它不作为运营商.所以你将两个参数传递给函数.

然而,

int m = max((a,b), c);
Run Code Online (Sandbox Code Playgroud)

这里首先,是操作符,第二个,是分隔符.所以你仍然向函数传递两个参数,而不是三个,它等同于:

int m = max(b, c); //as (a,b) evaluates to b
Run Code Online (Sandbox Code Playgroud)

希望有所帮助.:-)

  • 在这个例子中关于括号角色的一点注释会有所帮助,因为运算符的优先级低于=运算符.int x = 23,34; 根本不会编译. (3认同)