13

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

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

class TwoThings
{
    public:

    Thing things[2];

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

这是正确的方法吗?

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

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

4

1 回答 1

14

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

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

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

于 2015-04-20T09:22:51.480 回答