哪种c ++构造函数样式更好?

时间:2018-02-03 13:36:31

标签: c++ constructor styles

这些类是否相同?如果是这样,哪种风格更好?我更喜欢binary_node2,因为它更容易阅读。

class binary_node1
{
    public:
        binary_node* left;
        binary_node* right;
        int value;
        binary_node1(int v):left(nullptr),right(nullptr),value(v)
        {
        }
};
class binary_node2
{
    public:
        binary_node* left=nullptr;
        binary_node* right=nullptr;
        int value;
        binary_node2(int v):value(v)
        {
        }
};

2 个答案:

答案 0 :(得分:5)

它们不是出于同一目的。

第一个只为一个特定构造函数提供初始值。

如果在该构造函数中没有特别指定init的值,则第二个将为所有构造函数提供默认值。

答案 1 :(得分:2)

构造函数重载时,binary_node2中的类内默认成员初始值设定项非常有用,因为默认成员初始化程序({{1}在这种情况下)将用于初始化相应的成员(nullptrleft),除非成员在构造函数的成员初始化列表中显式初始化(​​或构造函数委托给另一个构造函数) )因此,它可以防止您不得不一遍又一遍地指定相同的初始值设定项。

例如:

right

如果默认构造函数初始化class binary_node2 { public: binary_node* left=nullptr; binary_node* right=nullptr; int value; binary_node2(int v):value(v) {} binary_node2(): value(0) {} // left, right set to nullptr }; left成员的所需值为right,则上述代码将执行此操作。

遵循nullptr方法(即:没有类内默认成员初始值设定项),它应该是:

binary_node1

看到区别?在这种情况下,它避免了重复,这可能容易出错。

相关问题