可以使用隐式构造函数初始化具有此向量成员的类吗?

时间:2012-06-13 16:56:53

标签: c++ constructor stdvector

我的班级需要一个有五个元素的成员std::vector<MyType> my_list。应使用默认构造函数初始化MyType s。我是否必须为这个类编写一个显式构造函数,或者可以在没有它的情况下解决它?

2 个答案:

答案 0 :(得分:2)

在C ++ 11中,您可以执行以下操作,并通过隐式生成的构造函数正确初始化向量:

class foo {
    std::vector<int> my_list { 1, 2, 3, 4, 5 };
};

没有C ++ 11,你必须自己编写:

template <typename T, std::size_t N>
T* begin(T(&arr)[N]) { return &arr[0]; }

template <typename T, std::size_t N>
T* end(T(&arr)[N]) { return &arr[0] + N; }

class foo {
    // imitate initializer list
    static const int default_list[] = { 1, 2, 3, 4, 5 };
    std::vector<int> my_list;
public:
    foo() : my_list(begin(default_list), end(default_list)) {}
};

答案 1 :(得分:1)

你需要自己写。编译器生成的构造函数将默认初始化my_list,这意味着它将为空。你需要这样的东西:

class MyClass {
    std::vector<MyType> my_list;

    MyClass() : my_list(5) {}
};