/ Vijos / 讨论 / 问答 /

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++调用函数时先运算","后面的?
好像有点不科学了啊啊啊=w=

2 条评论

  • @ 2017-01-13 23:31:22

    一般来说,在C++中,子表达式的求值顺序是未指定的。你可以在这个链接中查看更多讨论以及一些特殊情况。
    http://en.cppreference.com/w/cpp/language/eval_order

    C++标准中是这么说的:

    Except where noted, evaluations of operands of individual operators and of subexpressions of individual expressions are unsequenced.[...]

    编译器可以根据效率或其它一些事项决定首先考虑哪个参数(例如在你的程序中),因此你不应该考虑程序固定的求值顺序。

  • @ 2017-01-13 20:29:41

    表达式求值顺序是未定义的。

    • @ 2017-01-13 20:30:03

      *不应当做任何假设

  • 1