我有一个棘手的C ++问题:当你有一个带有委托构造函数的构造函数初始化列表时,列表执行顺序是什么?
这里存在两个相互矛盾的标准规则:
1.)构造函数初始化列表不是由列表顺序执行,而是由项目的声明顺序执行
2.)构造函数初始化列表中的委托构造函数总是在执行“母版构造函数”之前被调用。
哪条规则优越? (因为构造函数也是一个类项) 为什么这很重要:假设委托构造函数重新插入已由“母版构造函数”初始化的项目,反之亦然。
答案 0 :(得分:3)
§12.6.2/ 6说
如果 mem-initializer-id 指定构造函数的类, 它应该是唯一的 mem-initializer ...一旦目标构造函数返回,就会生成 委托构造函数被执行。
所以没有冲突,因为在委托构造函数之前你不能初始化任何东西。委托构造函数只需调用该构造函数,运行目标构造函数的初始化列表,运行目标构造函数,然后运行主构造函数。