首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >成员构造函数作为参数的求值顺序

问成员构造函数作为参数的求值顺序
EN

Stack Overflow用户
提问于 2018-07-13 17:58:52
回答 1查看 47关注 0票数 0

让我们假设一个类:

代码语言:javascript
复制
struct S {
    Obj1 o1;
    Obj2 o2;

    S() : o2( fn2() ), o1( fn1(), fn3() ) {}
};

在这种情况下,什么是保证排序的?o1()被排序-在o2()之前。fn1()和fn3()被排序-在o1()之前,fn2()在o2()之前。问题是fns的先后顺序。据我所知,fn1()和fn3()可以按未指定的顺序进行。fn1()和fn3()是否保证在fn2()之前进行排序?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-14 00:16:57

[intro.execution]/12一个完整的表达式是. (12.3) -一个init-声明符(第11条)或mem-初始化器(15.6.2),包括初始化器的组成表达式. [intro.execution]/16与完整表达式相关联的每一个值计算和副作用在每个值计算之前进行排序,并在与要评估的下一个完整表达式相关联的副作用之前排序。

因此,对o1( fn1(), fn3() )的调用以及它的所有子表达式和副作用都是在调用o2( fn2() )之前进行排序的。

如果您还不相信,在[class.base.init]/7中有一个非规范的注释

注意:每个mem初始化器执行的初始化构成一个完整表达式(4.6).mem初始化器中的任何表达式都作为执行初始化的完整表达式的一部分进行计算。-end注记

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51330575

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档