Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ c+中的逗号运算符+;不';t计算第二个表达式_C++_Comma Operator - Fatal编程技术网

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

C++ c+中的逗号运算符+;不';t计算第二个表达式,c++,comma-operator,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 <&l

我编写了以下代码:

#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;
}
使用
g++-O0 test.cpp-o test.out编译和运行结果:

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

此语句执行f()并将返回值赋给m,然后声明返回int类型的函数
v()<代码>int v()也称为

要实现
逗号运算符测试,请尝试:

int m;
m = f(),v();
cout << m << endl;
intm;
m=f(),v();

cout以下代码变体演示了这一操作:

进入

第二行是一个函数原型,它声明将有一个函数,
intv()
,它不接受任何参数并返回一个int

它不调用它,它只是预先声明它-如果编译器在实际定义它之前遇到对它的调用-因为主体是一个空语句(
)。编译器假定我们稍后或在不同的编译单元中实现它


因为这通常混淆了经验和新程序员,因为它是由C++引入的,允许你把函数原型放在函数体中,这叫做.< /p>,也请注意逗号分隔符比赋值操作符的优先级低。比尔兹:我误解了这个问题+1.@billz我希望我们能打消这是最烦人的分析的想法。如果你看一下你链接到的文章,你会发现最麻烦的解析是更复杂的

T1 x(T2())
tx()。此声明中存在的歧义与“最烦人的解析”完全没有关系。的可能重复
int m = f(),v(); 
int m;
m = f(),v();
cout << m << endl;
#include <iostream>

int f() { std::cout << "f()" << std::endl; return 1; }

int main() {
   int t = f(), v();
   std::cout << t << std::endl;
   return 0;
}
   int t = f(), v();
   int t = f();
   int v();