なじぇ?

class Hoge{
public:
 Hoge (int h,int p, int m) : piyo(p),moke(m),hoge(h){};
protected:
 int hoge,piyo,moke;
};

こんな感じのコードを書いていたら、なにやらコンパイラがワーニングをはいて、なんだろうなーってしばらく悩んでた。
正解は

class Hoge{
public:
 Hoge (int h,int p, int m) : hoge(h),piyo(p),moke(m){};
protected:
 int hoge,piyo,moke;
};

と、イニシャライズする順番を宣言どおりにしてやればよろしい模様。


でも、なんでだろうね。


Hogeインスタンスが作成されたときに、ヒープ上にhoge,piyo,moke用のメモリが確保されて、そこにh,m,pの値を詰め込むだけなんだから、別に順番なんてどうでもいいような気がするんだけどどうなんだろう?(間違ってたらフルボッコにしてください><。)