std::array<int, 10> 作为类成员是否初始化为零?
Is std::array<int, 10> as class member zero-initialized?
struct MyClass
{
std::array<int, 10> stdArr;
MyClass() : stdArr()
{}
};
MyClass c;
问题:
c.stdArr
初始化为零吗?- 如果是 - 为什么?
我自己矛盾的答案:
它是零初始化的:
std::array
想要表现得像一个c数组。如果在我上面的例子中stdArr
是一个 c 数组,它将通过初始化列表中的stdArr()
初始化为零。我希望在初始化列表中写入member()
初始化对象。它不是零初始化的:
-
std::array
通常只有一个成员,就我而言int[10] _Elems;
- 通常,基本类型和基本类型的数组(如
int[N]
(不会默认初始化。 -
std::array
是一个聚合类型,这意味着它是默认构造的。 - 因为没有初始化
_Elems
的自定义构造函数,我认为它不是零初始化的。
-
根据C++11标准,std::array
的正确行为是什么?
c.stdArr
初始化为零吗?
是的
如果是 - 为什么?
这将执行stdArr
的值初始化:
MyClass() : stdArr() {}
在此上下文中,值初始化的效果是对象的零初始化。
编辑:什么是聚合和 POD 中有很多相关信息...?
"std::array想要表现得像c数组"不是标准描述行为的方式。它是一个用户定义类型,用户定义类型的成员通过调用其构造函数来初始化,即 array<int,10>::array()
相关文章:
- 添加静态constexpr成员是否会更改结构/类的内存映射
- 内存中类位置的成员是否取决于类成员在类定义中的位置?
- 访问从联合与另一个成员集复制的联合中的一个成员是否未定义或未指定?
- POD 结构(相同类型的成员):成员是否位于连续的内存位置?
- 将结构别名为其第一个成员是否严格违反别名
- 将指针指向它的第一个成员是否违法?
- 常量指针到成员是否默认指向 int?
- 友元函数将内存分配给数组成员是否有任何限制?
- 检查成员是否在类中声明
- 给定仅包含布尔类型成员的结构的两个对象 s1 和 s2,只要 s1 的成员为 true,请检查 s2 的每个成员是否为真
- 未使用的数据成员是否占用内存
- 静态数据成员是否在所有类对象之前初始化?
- 如何检查两个元组的所有成员是否不同
- 使用之前在初始值设定项列表中初始化的成员初始化成员是否安全
- 使用enableif检查成员是否存在
- 类的成员是否可以与其类型(另一个类)命名相同的名称
- 堆分配类的成员是否在堆中自动分配
- 成员是否继承自超类的超类
- std::函数成员是否可以访问其他成员
- C++预处理器测试类成员是否存在