初期化子リスト

C++ のコンストラクタで変数を初期化するやりかたでなく、
こんな初期化の方法もある。

コンパイラの処理の仕方も微妙に違うらしい。

2010/09/24
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++のひとつの小技として覚えておいて損はない。
他人のコードで”何これっ”ってならない。