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