成员字段,建设顺序

Pau*_*nta 7 c++ initialization

在C++中,当你在下面看到的内容时,是否保证了构造的顺序?

Logger::Logger()
    : kFilePath_("../logs/runtime.log"), logFile_(kFilePath_)
{
    // ...
}
Run Code Online (Sandbox Code Playgroud)

Jam*_*lis 28

是的,始终保证施工顺序.但是,它不能保证与对象在初始化列表中出现的顺序相同.

成员变量按它们在类主体中声明的顺序构造.例如:

struct A { };
struct B { };

struct S {
    A a;
    B b;

    S() : b(), a() { }
};
Run Code Online (Sandbox Code Playgroud)

a然后是先建造的b.成员变量在初始化列表中出现的顺序无关紧要.


Lig*_*ica 9

构造的顺序是类定义中的声明顺序.

如果订单ctor-initializer不同,这不会影响施工顺序.您的编译器可能会对此发出警告.

见12.6.2/5(2003年措辞,命名[class.base.init]):

非静态数据成员应按其在类定义中声明的顺序进行初始化(同样不管mem-initializers的顺序如何).