这些类是否相同?如果是这样,哪种风格更好?我更喜欢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)
{
}
};
答案 0 :(得分:5)
它们不是出于同一目的。
第一个只为一个特定构造函数提供初始值。
如果在该构造函数中没有特别指定init的值,则第二个将为所有构造函数提供默认值。
答案 1 :(得分:2)
构造函数重载时,binary_node2
中的类内默认成员初始值设定项非常有用,因为默认成员初始化程序({{1}在这种情况下)将用于初始化相应的成员(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
};
和left
成员的所需值为right
,则上述代码将执行此操作。
遵循nullptr
方法(即:没有类内默认成员初始值设定项),它应该是:
binary_node1
看到区别?在这种情况下,它避免了重复,这可能容易出错。