【发布时间】:2017-09-03 10:41:26
【问题描述】:
刚刚从 C++03 切换到 C++11,我想知道,以下是否定义为始终为零初始化所有元素的数组 data?
template<size_t COUNT>
class Test {
public:
uint32 data[COUNT] = {};
};
【问题讨论】:
-
附带说明,如果您刚刚升级到 C++11,那么您不妨已经升级到 C++14。
-
是的,但是如果您切换到 C++11,您还应该使用
::std::array而不是普通的 C 数组,并且不需要在两者之间放置=,除非您需要避免意外调用到显式构造函数。 -
@tambre - 哦,实际上,我一定是出于习惯提到了 C++11(我已经在 03 中停留了好几年了,啊哈)
-
有趣的是,您可以对数组进行直接初始化而不是复制初始化:
uint32 data[COUNT] {}; -
@AnneQuinn 我相信
uint32 data[COUNT] = {};在 C++03 中也会对数组进行零初始化,请参阅 this,尽管 C++03 不允许类内成员初始化。跨度>
标签: c++ c++11 initialization list-initialization zero-initialization