post和pre increment,c ++中的减量

时间:2010-09-25 11:04:18

标签: c++

#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”

2 个答案:

答案 0 :(得分:11)

f(i--,i-- );调用Undefined Behaviour。不要写这样的代码。

编辑

上述表达式中出现的逗号,不是Comma operator。它只是一个分隔参数的分隔符(它不是一个序列点。)

此外,函数参数的评估顺序是Unspecified,但表达式调用Undefined Behavior,因为您试图在两个序列点之间修改i两次。

我很累。 :(

答案 1 :(得分:2)

这告诉您正在按照预期从右到左评估参数,而不是从左到右。这可能是因为调用约定或其他原因,但依靠函数参数求值的顺序通常是一个坏主意。