构造函数初始化 – 列表评估顺序

我有一个构造函数,需要一些参数。 我曾经假定他们是按照上面列出的顺序build造的,但是在一个案例中,看起来他们的build造方式是相反的,导致中止。 当我反驳了这个论点的时候,程序停止了中止。 这是我正在使用的语法的一个例子。 事情是,在这种情况下,a_需要在b_之前初始化。 你能保证施工的顺序吗?

例如

class A { public: A(OtherClass o, string x, int y) : a_(o), b_(a_, x, y) { } OtherClass a_; AnotherClass b_; }; 

它取决于类中成员variables声明的顺序。 所以a_将是第一个,那么b_将是你的例子中的第二个。

引用标准,澄清:

12.6.2.5

初始化应按以下顺序进行:

  • 然后,非静态数据成员应按照在类定义中声明的顺序进行初始化(不pipemem初始化的顺序如何)。

现在的标准参考看起来是12.6.2 13.3节:

(13.3) – 然后,非静态数据成员按照在类定义中声明的顺序进行初始化(不pipemem-initializers的顺序如何)。