C++エンコーダゲージ(004):クラスメンバー変数の定義と初期化の順序を一致させる

1874 ワード

軍規保持クラスメンバー変数の定義と初期化の順序が一致する
Always declare and initialize member variables in the same order
解読する
(1)一例
#include 

class Range
{
public:
    Range() : min_(0), max_(min_ + 10){}

    int GetMin()
    {
        return min_;
    }

    int GetMax()
    {
        return max_;
    }

private:
    int max_;
    int min_;

};

int main(int argc, char *argv[])
{
    Range r;
    std::cout << "min_ = " << r.GetMin() << " max_ = " << r.GetMax() << std::endl;
    return 0;
}

実行結果
min_ = 0 max_ = 12595198

プログラムが望む結果はmin_=0 max_=10の実際の結果max_であるべきである.の値を大きくします.これは、コンパイラがメンバー変数を初期化するときに、クラスの初期化リストで指定された順序ではなく、変数によって定義された順序であるためです.上記の例では、max_min_より前に定義されているが、初期化リストではmax_min_より後であり、実際にはmax_(min + 10)が実行されたときにmin_は初期化されていない.例の2つの変数の定義順序を逆にすると、次のようになります.
min_ = 0 max_ = 10

(2)クラスの初期化リストでメンバー変数を初期化する際には,必ず変数定義の順序で初期化シーケンスを書くことがベストプラクティスである.