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



这些类是相同的吗? 如果是这样,那么哪种风格更好? 我更喜欢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)
        {
        }
};

它们不是出于相同的目的。

第一个只为一个特定的构造函数提供 init 值。

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

构造函数重载时,类内默认成员初始值设定项(binary_node2中非常有用,因为默认成员初始值设定项(在本例中为 nullptr(将用于初始化相应的成员(leftright (,除非该成员在构造函数的成员初始化列表中显式初始化(或构造函数委托给另一个构造函数(,因此, 它使您不必一遍又一遍地指定相同的初始值设定项。

例如:

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
};

如果默认构造函数nullptr初始化 leftright 成员的所需值,则上面的代码就可以了。

按照binary_node1方法(即:没有类内默认成员初始值设定项(,它将是:

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

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

最新更新