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();