4

这是 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()); }

当然可以观察到以下输出:

1 3 2 4 5
2 4 1 3 5

1 2 3 4 5 呢?

(据我所知,唯一的限制是 1 在 3 之前排序,2 在 4 之前排序,并且 3 和 4 都在 5 之前排序。)

4

1 回答 1

8

C++03 确实规范地说函数调用不会交错。C ++ 11规范地说

调用函数(包括其他函数调用)中的每个求值,如果在被调用函数的主体执行之前或之后没有特别排序,则相对于被调用函数的执行是不确定的。

两者都足以禁止这一点。

于 2012-11-18T19:46:36.860 回答