括号或相等的初始化程序的初始化顺序

问题描述 投票:3回答:2

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

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

无论编译器如何,bar.y始终为2吗?

c++ initialization c++14
2个回答
3
投票

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

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


0
投票

从Scott Meyers的书,Effective C++,项目4:

C ++善变的一个方面是对象的顺序数据被初始化。此顺序始终相同:基类是在派生类之前初始化(另请参阅第12项),并且在类中,数据成员按声明

© www.soinside.com 2019 - 2024. All rights reserved.