初期化子リスト
C++ のコンストラクタで変数を初期化するやりかたでなく、
こんな初期化の方法もある。
コンパイラの処理の仕方も微妙に違うらしい。
http://sygh.blog.ocn.ne.jp/blogitems/2010/09/c_6d39.html
ちょっとしたマイナーテクですが、クラスのメンバー変数をコンストラクタでゼロクリアする際、下記のように書けます。
class Foo { struct Bar { float x, y, z; }; int m_intVal; double m_doubleVal; float m_floatArray[4]; const char* m_charPtr; Vector3 m_vector; public: Foo() : m_intVal() , m_doubleVal() , m_floatArray() , m_charPtr() , m_vector() { } };
とか
class Student : public Person { int id; public: Student() : Person(), id(0) {} };
http://www.02.246.ne.jp/~torutk/cxx/constructor/index.html
memsetとか使わなくても、それぞれの型にあった初期化をしてくれるっぽい。
もち、id(0) のように値を指定して、初期化することも。
これを用いるメリット、慣れれば見やすい。余計なバグの予防。処理速度に関しては初期化子の方が速い、らしいが
実際のところ環境にもよるし、初期化する対象にもよるし、コンパイラにもよるし、賛否両論。
まとめ
C++のひとつの小技として覚えておいて損はない。
他人のコードで”何これっ”ってならない。