13項 初期化リストのメンバは、宣言した順に並べよう

"初期化リストのメンバは、宣言した順に並べよう"


初期化リストで初期化されるメンバの順番は、宣言した順番です。
例えば下のコード

class STR
{
public:
	STR(const char *p = "NULL")
	{
		cout << p << "\n";
	}
};

class C
{
public:
	//s1,s2,s3の順番に記述したが,,,
	C() : s1("1"), s2("2"), s3("3")
	{
	}
private:
	//宣言された順番に初期化される
	STR s3;
	STR s2;
	STR s1;

};


int main()
{
	C c;
	...

実行してみると、
f:id:skru_y:20131121160909j:plain
画像のように、順番に初期化されることが分かります。


このことを忘れると、気付きづらく重大なエラーを起こすことがありますし、何より読みづらいです。