struct MyClass
{
std::array<int, 10> stdArr;
MyClass() : stdArr()
{}
};
MyClass c;
问题:
c.stdArr
是否已初始化?我自己的矛盾答案:
零初始化:
std::array
希望表现得像c-array。
如果在上面的示例中stdArr
是一个c数组,它将在初始化列表中由stdArr()
进行零初始化。我希望在初始化列表中写member()
来初始化对象。
它不是零初始化:
std::array
通常只有一个成员,我的情况是int[10] _Elems;
int[N]
)不是默认初始化的。std::array
是一种聚合类型,暗示它是默认构造的。_Elems
,我认为它不是零初始化。根据C ++ 11标准,std::array
的正确行为是什么?
答案 0 :(得分:19)
c.stdArr
是否已初始化?
是
如果是 - 为什么?
执行stdArr
的{{3}}:
MyClass() : stdArr() {}
在此上下文中,值初始化的效果是对象的value initialization。
中有大量相关信息答案 1 :(得分:0)
“std :: array想要表现得像c-array”并不是标准描述行为的方式。它是用户定义的类型,用户定义类型的成员通过调用其构造函数来初始化,即array<int,10>::array()