根据 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]

If there are fewer initializers in the list than there are members in the aggregate, then each member not explicitly initialized shall be default-initialized (8.5)


[dcl.init]

To default-initialize an object of type T means:

  • if T is a non-POD class type (clause 9), the default constructor for T is called (and the initialization is ill-formed if T has no accessible default constructor);
  • if T is an array type, each element is default-initialized;
  • otherwise, the storage for the object is zero-initialized.

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

请注意,int myArray[10] = {}; 将实现相同的目标。没有必要为第一个元素显式提供值。