gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 04:29:46 25 4
gpt4 key购买 nike

在 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 notexplicitly 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 isill-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] = {}; 将实现相同的目标。没有必要为第一个元素显式提供值。

关于c++ - 根据 C++ 版本和编译器初始化数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72235611/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com