C++编码器军规(004):保持类成员变量定义和初始化的顺序一致

    xiaoxiao2021-03-26  27

    军规 保持类成员变量定义和初始化的顺序一致


    Always declare and initialize member variables in the same order

    解读


    (1)一个例子

    #include <iostream> 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_并没有被初始化。把例子中两个变量的定义顺序颠倒后,结果如下:

    min_ = 0 max_ = 10

    (2)最佳实践 在用类的初始化列表来初始化成员变量时一定要按照变量定义的顺序书写初始化序列。

    转载请注明原文地址: https://ju.6miu.com/read-662984.html

    最新回复(0)