#include <iostream>
using namespace std;
void f(int x, int y){
cout << "x is " << x << endl;
cout << "y is " << y << endl;
}
int main(){
int i = 7;
f(i--,i-- );
cout << i << endl<< endl;
}
我们希望程序打印“x是7 \ n y是6 \ n我是5”
但节目打印“x是6 \ n y是7 \ n我是5”
答案 0 :(得分:11)
f(i--,i-- );
调用Undefined Behaviour。不要写这样的代码。
编辑:
上述表达式中出现的逗号,
不是Comma operator
。它只是一个分隔参数的分隔符(它不是一个序列点。)
此外,函数参数的评估顺序是Unspecified,但表达式调用Undefined Behavior,因为您试图在两个序列点之间修改i
两次。
我很累。 :(
答案 1 :(得分:2)
这告诉您正在按照预期从右到左评估参数,而不是从左到右。这可能是因为调用约定或其他原因,但依靠函数参数求值的顺序通常是一个坏主意。