【问题标题】:brace-or-equal-initializers initialization order大括号或相等初始化器初始化顺序
【发布时间】:2020-05-25 02:36:05
【问题描述】:

如果使用大括号或相等初始化器,成员变量的初始化顺序是什么?它们的初始化和代码顺序一样吗?​​

struct foo {
    int x = 1;
    int y = x + 1;
} bar;

无论编译器如何,bar.y 是否总是2

【问题讨论】:

    标签: c++ initialization c++14


    【解决方案1】:

    是的,y 保证在x 之后被初始化。非静态数据成员在类定义中始终为initialized in order of their declaration,无论它们是如何初始化的(通过member initializer listdefault member initializer,甚至default initialization)。

    3) 然后,非静态数据成员按顺序初始化 类定义中的声明。

    【讨论】:

      【解决方案2】:

      来自 Scott Meyers 的书,Effective C++,第 4 项:

      C++ 的一个不变的方面是对象的顺序 数据被初始化。这个顺序总是一样的:基类是 在派生类之前初始化(另见条款 12),并且在一个 类中,数据成员按它们的顺序进行初始化 声明

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-12-11
        • 2015-08-11
        • 2015-06-04
        • 2015-12-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多