【发布时间】:2012-06-01 15:40:30
【问题描述】:
对于这个非变量示例:
int Func1();
double Func2();
void MyFunc( int, double );
int main()
{
MyFunc( Func1(), Func2() );
//...
}
没有指定是先计算Func1()还是Func2(),只是两者都必须在调用MyFunc()之前完成。
这种排序如何与可变参数的扩展一起工作?
template < typename Func, typename ...Args >
void MyFunc2( Func &&f, Args&& ...a )
{
int b[] = { f( std::forward<Args>(a) )... };
//...
}
假设f 是一个函数对象,它在第一次调用后会改变其状态。会为a 的每个段按顺序调用f 吗?换句话说,f 会在a 的列表中的第一个项目上调用,然后是第二个项目,第三个等等,而不是随机跳过展开的列表?每个项目之间有我们过去所说的序列点吗?
【问题讨论】:
-
“我们过去称为序列点的东西”是什么意思?
-
我只知道一点点,但是诸如“x和y之间有一个序列点”之类的语句已被替换为“x 在 y 之前排序。"新的完整定义更加精确,并且包括线程调整。
标签: c++ c++11 variadic-templates variadic-functions sequence-points