调用函数中的这些评估在被调用函数体之前没有具体排序?

Bel*_*loc 6 c++ language-lawyer c++14

[intro.execution]/15包含N4140第11页中的这些陈述(重点是我的):

当调用函数时(无论函数是否为内联函数),与任何参数表达式相关联的每个值计算和副作用,或者使用指定被调用函数的后缀表达式,都会在执行每个表达式或语句之前对其进行排序.叫功能.[注意:与不同参数表达式相关的值计算和副作用未被排序.-end note] 调用函数(包括其他函数调用)中的每个评估在执行被调用函数体之前或之后没有特别排序,对于被调用函数的执行是不确定的.9

9)换句话说,函数执行不会相互交错.

我想知道在调用函数的这些评估中,在执行被调用函数体之前没有具体排序的是什么?


*编辑*在C++中的"序列之前"和"调用函数中的每个评估"这个问题中声明了两个答案,并没有任何关于我的问题.请阅读我的问题和其中给出的答案.另请参阅我对@CoryKramer下面给出的答案的评论.


*编辑2*这可能是我的问题的答案.见DR 1949中的第3号决议:

调用函数(包括其他函数调用)中的每个评估(在执行被调用函数体之前或之后没有特别排序)对于被调用函数的执行是不确定的顺序对于每个函数调用F,对于每个内F和不内˚F发生,但在相同的线程并作为同一信号处理程序(如果有的话)的一部分被评估每个评估乙发生时评价A,或者A B或B A之前进行测序之前进行测序9 [注意:如果A和B不会被测序,那么它们将被不确定地排序. - 尾注]

Cor*_*mer 4

如果你有两个返回的函数int

int Foo();
int Bar();
Run Code Online (Sandbox Code Playgroud)

然后你就有了一些调用函数

void SomeFunction(int x, int y);
Run Code Online (Sandbox Code Playgroud)

然后调用代码看起来像

SomeFunction(Foo(), Bar());
Run Code Online (Sandbox Code Playgroud)

他们说Foo和的执行顺序Bar是不确定的。

  • 你所说的与上面的注释有关`[注意:与不同参数表达式相关的值计算和副作用是不排序的。——尾注]`。我只是看不出你所说的和我的问题中突出显示的短语之间有任何关系。 (3认同)
  • @Belloc 假设我们正在讨论 `Foo()` 的执行。然后,对“Bar()”的调用是调用函数中的计算,在被调用函数体执行之前或之后没有专门排序。 (3认同)