参数中的函数调用顺序是未定义的行为吗?

时间:2019-06-19 12:54:38

标签: c++

我得到了这样的代码:

#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()的顺序很重要)?这是一个好习惯吗(与顺序调用它们并将结果传递给函数比较)?

0 个答案:

没有答案