我有一个没有默认构造函数的类Thing
。
我们定义另一个类,它现在必须立即启动数组元素,因为如果没有默认构造函数,就无法进行后期赋值。所以我们有:
class TwoThings
{
public:
Thing things[2];
TwoThings() : things({Thing("thing 1"),Thing("thing 2")})
{
}
}
这是正确的方法吗?
GCC 编译得很好,而 Clang 没有,说明应该使用"初始值设定项列表"。我尝试了几种替代方法,例如双括号{{ ... }}
等,但无法获得 Clang 的编译等效项。
如何在 Clang 中初始化没有默认构造函数的数组?
是的,括号成员数组初始化是 GCC 扩展。要使其成为标准,您可以只使用一组大括号(需要 C++11):
TwoThings() : things{Thing("thing 1"),Thing("thing 2")}
{
}
如果无法使用 C++11,则可能需要使用其他存储方法,例如 std::pair<Thing,Thing>
或 std::vector<Thing>
。