具有委托构造函数的构造函数初始化列表执行顺序

时间:2013-02-13 16:09:39

标签: list constructor initialization

我有一个棘手的C ++问题:当你有一个带有委托构造函数的构造函数初始化列表时,列表执行顺序是什么?

这里存在两个相互矛盾的标准规则:
1.)构造函数初始化列表不是由列表顺序执行,而是由项目的声明顺序执行 2.)构造函数初始化列表中的委托构造函数总是在执行“母版构造函数”之前被调用。

哪条规则优越? (因为构造函数也是一个类项) 为什么这很重要:假设委托构造函数重新插入已由“母版构造函数”初始化的项目,反之亦然。

1 个答案:

答案 0 :(得分:3)

§12.6.2/ 6说

  

如果 mem-initializer-id 指定构造函数的类,   它应该是唯一的 mem-initializer ...一旦目标构造函数返回,就会生成   委托构造函数被执行。

所以没有冲突,因为在委托构造函数之前你不能初始化任何东西。委托构造函数只需调用该构造函数,运行目标构造函数的初始化列表,运行目标构造函数,然后运行主构造函数。