initializer_list c++11 中的求值顺序

2024-02-29

在下面的代码中是否需要f1之前被调用f2(或反之亦然)还是未指定?

int f1();
int f2();

std::initializer_list<int> list { f1(), f2() };

这是 C++ 标准的一个有趣的角落,其中执行顺序被明确定义。第 8.5.4 节 [dcl.init.list],第 4 段:

在花括号初始化列表的初始值设定项列表中,初始值设定项子句(包括由包扩展 (14.5.3) 产生的任何初始值设定项子句)按照它们出现的顺序进行计算。也就是说,与给定初始值设定项子句相关联的每个值计算和副作用都在与初始值设定项列表的逗号分隔列表中跟随它的任何初始值设定项子句相关联的每个值计算和副作用之前排序。

因此,在初始化列表中,函数调用是从左到右计算的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

initializer_list c++11 中的求值顺序 的相关文章

随机推荐