C ++中的表达式评估问题

时间:2017-01-13 14:21:25

标签: c++

请参阅以下代码:

#include<bits/stdc++.h>
using namespace std;
int read(){
    int a;
    scanf("%d", &a);
    return a;
}
void print(int a, int b){
    printf("%d %d", a, b);
}
int main(){
    print(read(), read());
}

输出的结果转换了数字的顺序,它不是C ++调用函数操作&#39;,&#39;后面?

1 个答案:

答案 0 :(得分:0)

通常,在C ++中,子表达式的评估顺序为unspecified。查看链接以获取更多讨论以及一些特殊情况。

C ++标准说:

  

除非另有说明,否则评估各个运营商的操作数   个别表达的子表达式没有序列。[...]

编译器可以根据效率或其他一些考虑因素来决定首先评估print(在您的示例中)的哪个参数。你应该从不依赖订单。