这是对C++实现的一种后续行为,理论上可以并行化两个函数参数的评估吗?
假设我有以下C++ 11程序:
#include <cstdio>
using std::printf;
int g() { printf("1\n"); printf("3\n"); return 2; }
int h() { printf("2\n"); printf("4\n"); return 3; }
void f(int a, int b) { printf("%i\n", a+b); }
int main() { f(g(), h()); }
Run Code Online (Sandbox Code Playgroud)
当然可以观察到以下输出:
1 3 2 4 5
2 4 1 3 5
Run Code Online (Sandbox Code Playgroud)
1 2 3 4 5怎么样?
(据我所知,唯一的限制是1在3之前测序,2在4之前测序,3和4在5之前测序)
可能重复:
功能参数的评估顺序
在C/C++中使用以下结构是否安全?
f(g(), h());
Run Code Online (Sandbox Code Playgroud)
其中g()预期要被评估第一,然后h().
所有编译器都在所有体系结构上显示相同的行为吗?