c ++中的逗号运算符不计算第二个表达式

ely*_*hiv 15 c++ comma-operator

我写了以下代码:

#include <iostream>
using namespace std;

int f()
{
    cout << "f()" << endl;
    return 3;
}

int v()
{
    cout << "v()" << endl;
    return 4;
}

int main()
{
    int m = f(),v();
    cout << m << endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我希望它打印:

f()
v()
3
Run Code Online (Sandbox Code Playgroud)

编译g++ -O0 test.cpp -o test.out并运行结果:

f()
3
Run Code Online (Sandbox Code Playgroud)

为什么省略对v的调用?(这不能做优化,因为我添加了标志-O0)

bil*_*llz 21

int m = f(),v(); 
Run Code Online (Sandbox Code Playgroud)

该语句执行f()并将返回值赋给m,然后声明v()返回int类型的函数.int v();也被称为最烦恼的解析.

要完成comma operator测试,请尝试:

int m;
m = f(),v();
cout << m << endl;
Run Code Online (Sandbox Code Playgroud)

现场样本.

  • @billz我希望我们能够理解这是最令人烦恼的解析.如果你看一下你链接到的文章,你会发现最令人烦恼的解析是更复杂的`T1 x(T2());`不是`T x();`. (3认同)
  • 本声明中存在的歧义与"最令人烦恼的解析"毫无关系. (3认同)
  • 另外,你可以尝试int m =(f(),v()); (2认同)
  • @billz:我误解了这个问题.+1. (2认同)