为什么类成员总是按照声明的顺序初始化?

时间:2015-01-10 02:59:12

标签: c++ initialization

C ++标准规定:

  

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

为什么呢?如果成员按照它们在初始值设定项中出现的顺序进行初始化,然后默认为声明顺序(如果它们未在初始值设定项中列出),那么它会更直观吗?

编辑RE:DUPLICATE

另一个问题中接受的答案似乎并不完整(我很高兴被证明是错的,但我需要更多的解释而不是答案)。

它指出初始化始终按声明顺序的原因是虽然可能有多个构造函数,但只能有一个析构函数,它需要使用声明来确定销毁顺序。

我知道为什么编译器需要使用声明顺序进行销毁,但我不明白为什么它需要在构造时严格执行相同的顺序。如果它们确实需要对称,为什么允许程序员随意定义初始化器的顺序。似乎如果成员必须以特定顺序初始化,则以不同的顺序编写初始化程序应该是编译器错误。

1 个答案:

答案 0 :(得分:3)

the accepted answer to another SO question

有很好的解释
  

这种排序的原因是因为只有一个析构函数,它必须选择“逆序”来销毁类成员。在这种情况下,最简单的解决方案是使用类中的声明顺序,以确保始终以正确的相反顺序销毁属性。