没有默认构造函数的C ++成员数组初始化

时间:2015-04-20 09:16:44

标签: c++ clang array-initialization

我有一个类Thing没有默认构造函数。

现在我们定义另一个类,现在必须立即对数组元素进行初始化,因为没有默认构造函数,就不能进行延迟赋值。所以我们有:

class TwoThings
{
    public:

    Thing things[2];

    TwoThings() : things({Thing("thing 1"),Thing("thing 2")})
    {
    }
}

这是正确的方法吗?

GCC编译得很好,而Clang没有,说明"初始化列表"应该使用。我尝试了几种替代方法,例如双括号{{ ... }}等,但无法为Clang获得编译等效。

如何在Clang中初始化没有默认构造函数的数组?

1 个答案:

答案 0 :(得分:9)

是的,带括号的成员数组初始化是GCC扩展。为了使它成为标准,你可以使用一组大括号(需要C ++ 11):

TwoThings() : things{Thing("thing 1"),Thing("thing 2")}
{
}

如果您不能使用C ++ 11,则可能需要使用其他存储方法,例如std::pair<Thing,Thing>std::vector<Thing>