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

时间:2015-05-20 10:59:08

标签: c++ function expression iso

具有以下界面的容器类:

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 ++标准是否说明了有关执行顺序的任何内容?

1 个答案:

答案 0 :(得分:2)

它说订单完全没有说明。

测序规则过于复杂,无法在此重现,并且很难证明是消极的,但非规范的注释可以方便地为我们总结:

  

[C++11: 5.2.2/4]:调用函数时,应使用相应的参数初始化每个参数(8.3.5)(8.5,12.8,12.1)。 [注意:此类初始化相对于彼此不确定地排序(1.9) - 结束注释] [..]

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