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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了括号或相等的初始化程序的初始化顺序相关的知识,希望对你有一定的参考价值。

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

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

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

答案

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

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

另一答案

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

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

以上是关于括号或相等的初始化程序的初始化顺序的主要内容,如果未能解决你的问题,请参考以下文章

括号匹配问题(顺序栈实现)

类与接口初始化顺序

初始化列表中元素的求值顺序

Java编程思想笔记-类的初始化顺序

栈和队列的应用

Clang 访问修饰符顺序和 decltype