代码之家  ›  专栏  ›  技术社区  ›  김선달

大括号或相等的初始化器初始化顺序

  •  0
  • 김선달  · 技术社区  · 4 年前

    如果使用大括号或相等的初始化器,成员变量的初始化顺序是什么?它们的初始化是否与代码顺序相同?

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

    威尔 bar.y 永远是 2 不管编译器是什么?

    1 回复  |  直到 4 年前
        1
  •  3
  •   songyuanyao    4 年前

    对, y 保证在以下情况下初始化 x 非静态数据成员总是 initialized in order of their declaration 在类定义中,无论它们是如何初始化的(通过 member initializer list default member initializer ,甚至 default initialization ).

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

        2
  •  0
  •   TonySalimi    4 年前

    根据Scott Meyers的书, Effective C++ ,第4项:

    C++的一个不变的方面是对象的顺序 数据被初始化。这个顺序总是一样的:基类是 在派生类之前初始化(另见第12项),并在 类,数据成员在中初始化 它们的顺序 宣布 .