14 October 2022

C++ 核心指南目录

C.47: Define and initialize data members in the order of member declaration

理由

为了减少混乱和错误。不管你按什么顺序初始化成员变量,最终的初始化顺序都是按照声明的顺序进行初始化的。

例子

class Foo {
public:
    int m1;
    int m2;
    Foo(int x) :m2{x}, m1{++x} { }   // BAD: misleading initializer order
    // ...
};

Foo x(1); // surprise: x.m1 == x.m2 == 2
std::cout << x.m1 << " " << x.m2;
2 2

强化

  • (简单)成员初始化列表要和成员声明的顺序相同