C ++ 11类成员初始化

时间:2017-09-03 10:41:26

标签: c++ c++11 initialization list-initialization zero-initialization

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

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

1 个答案:

答案 0 :(得分:3)

是的,它得到了保证;对于数组类型,list initialization转为aggregate initialization

  

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

然后进行聚合初始化:

  

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

所以data的所有元素都是value initialized,对于uint32,他们最终会zero-initialized

  

否则,该对象被零初始化。