这些类是相同的吗? 如果是这样,那么哪种风格更好? 我更喜欢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
(将用于初始化相应的成员(left
和 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
};
如果默认构造函数nullptr
初始化 left
和 right
成员的所需值,则上面的代码就可以了。
按照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) {}
};
看到区别了吗?在这种情况下,它可以避免重复,重复容易出错。