繁体   English   中英

根据 C++ 版本和编译器初始化数组

[英]Initialize array based on C++ version and compiler

在 C++11 或更高版本中,无论编译器如何int myArray[10] = { 0 }; 会将所有元素初始化为零。 问题是这在 C++98 中是否也可以工作,编译器能否决定将所有元素初始化为零? 换句话说,具有给定编译器的 C++98 是否可以忽略将零分配给所有元素?

我找到了这个页面: https ://en.cppreference.com/w/cpp/language/zero_initialization 列出了关于零初始化的 C++98 缺陷。

所有元素都为零。 来自 C++98 的引用:

[dcl.init.aggr]

如果列表中的初始化器少于聚合中的成员,则每个未显式初始化的成员都应默认初始化(8.5)


[dcl.init]

默认初始化 T 类型的对象意味着:

  • 如果 T 是非 POD 类类型(第 9 条),则调用 T 的默认构造函数(如果 T 没有可访问的默认构造函数,则初始化是非良构的);
  • 如果 T 是数组类型,则每个元素都是默认初始化的;
  • 否则,对象的存储被零初始化。

与从 C++03 开始​​的含义相比,默认初始化的含义在 C++98 中完全不同,在 C++03 中,旧的默认初始化本质上被重命名为值初始化,而新的默认初始化变成了对普通类型的“无初始化”。

注意int myArray[10] = {}; 会达到同样的目标。 没有必要为第一个元素显式提供值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM