传递函数参数时的 C++ 执行顺序

C++ execution order when passing function arguments

具有以下接口的容器class:

template <typename T> class DynArray {
  /// Returns the number of elements in the array.
  inline size_t GetCount();
  /// Releases the internal memory from the \class DynArray
  /// and returns it. The memory must be deallocated manually.
  inline T* Release();
}

在像

这样的函数调用中
SomeFunction(arr.GetCount(), arr.Release())

我原以为 arr.GetCount() 会在 arr.Release() 之前被调用,但实际上似乎发生了相反的情况,导致第一个参数传递的值是 0 而不是实际值数组大小。我正在使用 Visual Studio 2012.

C++ 标准是否对计算函数参数时的执行顺序有任何具体说明?

说订单完全未指定。

排序规则太复杂,无法在这里重现,而且很难证明是否定的,但是一个非规范的注释方便地为我们总结了它:

[C++11: 5.2.2/4]: When a function is called, each parameter (8.3.5) shall be initialized (8.5, 12.8, 12.1) with its corresponding argument. [ Note: Such initializations are indeterminately sequenced with respect to each other (1.9) — end note ] [..]

(C++14 中的相同文本。)