具有初始化列表的构造函数中的这种重复是否真的有必要?

时间:2015-02-04 09:41:29

标签: c++ class c++11 constructor initializer-list

我是否在班上正确使用初始化列表?似乎有很多代码重复。如果我需要另一个变量,我必须在三个地方添加它。

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

2 个答案:

答案 0 :(得分:4)

初始化列表的使用是正确的,但是对于这个类的重点是非常可疑的。您可以将所有成员公开,然后使用聚合或统一初始化来初始化每个成员。如果你实际上不需要显示复杂的语义,那么使用init列表没有任何问题。

答案 1 :(得分:2)

如果你最后上课,那个 1)让构造函数发送所有数据,
2)所有成员都有吸气剂和
3)为所有成员设置制定者,
你应该选择一个没有私人成员的结构。

然后你可以使用'统一初始化',如:
MyX x{"hello",5.5}; 无需编写构造函数。

如果不是这种情况(你的班级实际上有一个不变量)那么 是的,你必须在添加成员时在3个地方添加一个东西。

请注意,由于范围规则,以下工作原理:

class A {
    int mem;
public:
    A(int mem) : mem(mem) {}
};

不需要下划线。