我是否在班上正确使用初始化列表?似乎有很多代码重复。如果我需要另一个变量,我必须在三个地方添加它。
class MyClass {
public:
MyClass(
anotherClass _a,
std::string _b,
std::string _c,
float _d
)
: a(_a),
b(_b),
c(_c),
d(_d)
{ }
private:
anotherClass a;
std::string b;
std::string c;
float d;
};
答案 0 :(得分:4)
初始化列表的使用是正确的,但是对于这个类的重点是非常可疑的。您可以将所有成员公开,然后使用聚合或统一初始化来初始化每个成员。如果你实际上不需要显示复杂的语义,那么使用init列表没有任何问题。
答案 1 :(得分:2)
如果你最后上课,那个
1)让构造函数发送所有数据,
2)所有成员都有吸气剂和
3)为所有成员设置制定者,
你应该选择一个没有私人成员的结构。
然后你可以使用'统一初始化',如:
MyX x{"hello",5.5};
无需编写构造函数。
如果不是这种情况(你的班级实际上有一个不变量)那么 是的,你必须在添加成员时在3个地方添加一个东西。
请注意,由于范围规则,以下工作原理:
class A {
int mem;
public:
A(int mem) : mem(mem) {}
};
不需要下划线。