gpt4 book ai didi

c++ - 在可变扩展中排序

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:31:00 25 4
gpt4 key购买 nike

对于这个非可变的例子:

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 是一个函数对象,它在第一次调用后会改变其状态。 f 是否会按顺序为 a 的每个段调用?换句话说,f 会在 a 列表中的第一个项目上调用,然后是第二个项目、第三个项目等等,而不是随机跳过展开的列表?每个item之间有没有我们常说的sequence points?

最佳答案

是的,大括号括起来的初始化列表保证了从左到右的计算顺序,而函数调用则不能。所以 MyFunc2 将正确排序。

维基百科文章涵盖了这个:https://en.wikipedia.org/wiki/Variadic_templates

Is there what we used to call sequence points between each item?

不,虽然它使用逗号标记,但它不是逗号运算符。

关于c++ - 在可变扩展中排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10764867/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com