首页  >  文章  >  后端开发  >  std::array 在 C 11 中是默认初始化的吗?

std::array 在 C 11 中是默认初始化的吗?

Linda Hamilton
Linda Hamilton原创
2024-10-30 11:47:02915浏览

Is std::array Default-Initialized in C  11?

std::array 的默认初始化

C 11 引入了 std::array 数据结构,它类似于 C 风格的数组,但提供了额外的功能,例如 template-基于类型规范和编译时大小确定。然而,出现了一个常见问题:在没有显式初始化的情况下声明 std::array 是否会导致每个元素的默认初始化?

根据 C 语言规范 (§8.5/11),任何没有显式初始化程序的对象进行默认初始化。这包括 std::array 对象。默认初始化会初始化非类类型的对象,但对于类类型的对象(std::array 就是),它会调用默认构造函数。

但是,cppreference 文档提到默认构造函数“default-构造或复制构造数组的每个元素。”这意味着 std::array 可能不会对每个元素执行默认初始化。

答案:

是的,默认情况下,声明一个 std::array 而不进行显式初始化将按照 C 11 规范默认初始化所有元素。此行为适用于零大小和非零大小的数组。

值初始化与默认初始化:

请注意值初始化 (8.5/7)与默认初始化不同。值初始化为元素分配其各自类型的默认值,对于基本类型来说通常为零或 false。要显式执行值初始化,可以使用带有空初始值设定项的大括号:

<code class="cpp">std::array<int, 13> cxx_style_array{}; // Value-initialize all elements to 0</code>

这显式地将所有元素设置为 int 的默认值,即 0。

以上是std::array 在 C 11 中是默认初始化的吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn