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

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

Linda Hamilton
发布: 2024-10-30 11:47:02
原创
1010 人浏览过

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板