我得到了这样的代码:
#include <iostream>
int f1() {
std::cout << 1 << std::endl;
return 1;
}
int f2() {
std::cout << 2 << std::endl;
return 2;
}
class Bar {
public:
Bar(int i, int j) {}
};
int main() {
Bar bar(f1(), f2());
}
使用gcc 7.4.0编译代码时,输出为2 1
,而使用clang 6.0时,输出为1 2
。
所以我有一个问题:
调用参数的顺序是未定义的行为吗?如果是这样,是否可以强制编译器按f1()
和f2()
的顺序进行调用(在某些情况下f1()
和f2()
的顺序很重要)?这是一个好习惯吗(与顺序调用它们并将结果传递给函数比较)?