具有以下界面的容器类:
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 ++标准是否说明了有关执行顺序的任何内容?
答案 0 :(得分:2)
它说订单完全没有说明。
测序规则过于复杂,无法在此重现,并且很难证明是消极的,但非规范的注释可以方便地为我们总结:
[C++11: 5.2.2/4]:
调用函数时,应使用相应的参数初始化每个参数(8.3.5)(8.5,12.8,12.1)。 [注意:此类初始化相对于彼此不确定地排序(1.9) - 结束注释] [..]
(C ++ 14中的相同文字。)