成员字段,建设顺序

时间:2011-06-10 15:54:04

标签: c++ initialization

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

Logger::Logger()
    : kFilePath_("../logs/runtime.log"), logFile_(kFilePath_)
{
    // ...
}

2 个答案:

答案 0 :(得分:28)

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

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

struct A { };
struct B { };

struct S {
    A a;
    B b;

    S() : b(), a() { }
};
首先构建

a,然后b。成员变量在初始化列表中出现的顺序无关紧要。

答案 1 :(得分:9)

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

如果ctor-initializer中的排序不同,则不会影响构造顺序。您的编译器可能会对此发出警告。

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

  

非静态数据成员应为   按照他们的顺序初始化   在类定义中声明   (再次无论顺序如何   MEM-初始化)。