对于这个非可变示例:
int Func1();
double Func2();
void MyFunc( int, double );
int main()
{
MyFunc( Func1(), Func2() );
//...
}
没有指定是否先计算Func1()
or Func2()
,只是两者都必须在MyFunc()
调用之前完成。
这种排序如何与可变参数的扩展一起工作?
template < typename Func, typename ...Args >
void MyFunc2( Func &&f, Args&& ...a )
{
int b[] = { f( std::forward<Args>(a) )... };
//...
}
假设这f
是一个函数对象,它在第一次调用后改变了它的状态。将按f
顺序调用? a
换句话说,将f
在a
's 列表中的第一项上调用,然后是第二项,第三项等,而不是随机跳过扩展列表?每个项目之间是否有我们过去所说的序列点?