首页 > 后端开发 > C++ > C 11 的 `std::vector::resize()` 接口是否有效更改值初始化新元素?

C 11 的 `std::vector::resize()` 接口是否有效更改值初始化新元素?

DDD
发布: 2024-12-26 14:11:14
原创
366 人浏览过

Does C  11's `std::vector::resize()` Interface Change Effectively Value-Initialize New Elements?

研究 std::vector::resize() 和 Boost.Container 的 resize() 的行为

在 C 03 中,std::vector: :resize() 使用所提供值的副本初始化新分配的元素。 C 11 引入了重载以允许值初始化或通过复制进行初始化。

使用 Boost.Container 的向量(它支持与 C 11 类似的三个 resize() 重载)进行测试来验证行为。在 C 03 模式下,std::vector 和 Boost.Container 的向量都按预期运行,用零初始化新元素。

但是,在 C 11 模式下,std::vector 和 Boost.Container 的向量仍然初始化使用用于值初始化的重载时带有零的新元素。这就提出了一个问题:

C 11 std::vector::resize() 接口更改实际上有效吗?

结果表明接口更改并未达到预期效果,因为新元素仍在初始化中

附录

为了解决现有分配器的局限性,我们提出了一种替代分配器适配器,它提供了一种更安全、更可靠的方法来实现值初始化,而无需初始化所有类型的元素:

template <typename T, typename A=std::allocator<T>>
class default_init_allocator : public A {
  // ... implementation
};
登录后复制

此适配器插入construct()调用以进行值初始化,将它们转换为默认初始化调用。它还可以正确处理默认初始化。

以上是C 11 的 `std::vector::resize()` 接口是否有效更改值初始化新元素?的详细内容。更多信息请关注PHP中文网其他相关文章!

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