首页 > 后端开发 > C++ > 正文

为什么 std::array 缺少带有值初始化的构造函数?

DDD
发布: 2024-10-23 17:59:03
原创
307 人浏览过

Why Does std::array Lack a Constructor with Value Initialization?

为什么 std::array 没有带有值初始化的构造函数?

std::array 是一个代表固定值的类size 数组,但它缺少一个为其所有元素获取值的构造函数。缺少这样的构造函数可能看起来令人费解,尤其是当像 std::vector 这样的动态容器具有类似的构造函数时。

这种省略是故意的,因为 std::array 被设计为聚合类型。 C 中的聚合是仅由数据成员组成且没有用户声明的构造函数的类。因此,std::array 只能使用大括号括起来的初始化列表或通过复制/移动构造来初始化。

虽然 std::array 提供了一个 fill 方法来为所有元素赋值,但它不能替代对于具有值初始化的构造函数。 fill 方法对已构造的数组进行操作,初始化其元素,但不影响构造之前的内存状态。

如果需要使用特定值 (-1) 初始化 std::array 的所有元素在您的示例中),您可以使用默认构造,然后使用 fill:

<code class="cpp">std::array<int, 10> myArray; // default construction (uninitialized memory)
myArray.fill(-1); // initialize all elements with -1</code>
登录后复制

默认构造不会将聚合的内存归零,因此 fill 方法可以正确初始化所有元素,而无需覆盖归零值。请注意,对于非平凡的可初始化类型,此行为可能会发生变化。

以上是为什么 std::array 缺少带有值初始化的构造函数?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!