クラスのコンストラクタのコードを書くときに、コロン「:」が良く使われます。
これって何でしょう?
最初の頃、これが良く分からなくて調べてみると、
メンバー変数や親クラスを初期化するものだと分かりました。
<コンストラクタ1>
XXClass()
: m_str("###")
{};
こんな具合に記述されると、m_strがstringならば以下のコードが呼ばれたのと同じことです。
string m_str("####");
それだと、コンストラクタで次のように書くのと同じだと思いません?
<コンストラクタ2>
XXClass()
{
m_str = "###";
};
私もかつてそう思ってました。
コロンは見づらいので、{}の中で記述するほうがいい!と思ってました。
でも違うことが後で分かりました。
いったい何が違うんでしょうか?
実は、結果は同じです。
でも、コロンを使わない方は途中経過が違っていて、次のようにするのと同じことになります。
string m_str;
m_str = "###";
つまり、m_strが引数なしでstringのコンストラクタが呼ばれ、その後に"###"が代入されることになります。
余分な初期化処理が入るので遅いのです。
実際、上記二つのコンストラクタを10,000,000回呼ぶループを作って時間を計りましたら、以下のようでした。
1.コロンを使用する場合 : 4.94s
2.コロンを使用しない場合: 5.56s
一割くらい違いますよね!
クラス1つでこの違いなのでもっとコンストラクタの処理がもっと重くて、
呼び出す回数ももっと多ければ、かなり大きな差になると思います。
ただ、コードの位置が違うだけで。
ひゃ~。
見栄えはよくないかもしれないですが、慣れれば大丈夫。
是非、コロンを使いましょう!