1

刚刚从 C++03 切换到 C++11,我想知道,以下是否定义为始终为零初始化data所有元素的数组?

template<size_t COUNT>
class Test {
public:
    uint32 data[COUNT] = {};
};
4

1 回答 1

3

是的,这是有保证的;列表初始化转换为数组类型的聚合初始化:

否则,如果T是聚合类型,则执行聚合初始化。

然后进行聚合初始化:

如果初始化子句的数量少于成员的数量或初始化列表完全为空,则剩余成员由空列表初始化,按照通常的列表初始化规则(对非类类型执行值初始化和具有默认构造函数的非聚合类,以及聚合的聚合初始化)。

所以 的所有元素都data将被初始化,因为uint32它们最终会被初始化为零

否则,对象被零初始化。

于 2017-09-03T10:50:36.130 回答