gpt4 book ai didi

c++ - C++11 是否强制要求 vector 将 resize() 中的元素归零?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:10:43 24 4
gpt4 key购买 nike

<分区>

这个问题是关于 new[] int 和 new [] int() 在语义和性能上的差异,以及在向 allocator_traits::construct 添加 ctor 参数的完美转发时可能无意中创建的从第一个到第二个措辞的变化().这个问题不涉及一个非常明显的问题,即默认 ctor 运行在由 vector 的 resize() 构造的所有新元素上。

对我来说,在调整大小时清除内置类型 vector 的元素似乎是一种浪费。但是 VS2012 的实现使得 resize(n) 以及因此带有计数参数的构造函数实际上将分配的值数组设置为 0。

我还在标准(http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2012/n3485.pdf)中找到了对此的支持,但我认为它到达那里可能是一个错误,因为它依赖于最近涉及完美转发的条款:

第 507 页:

template <class T, class... Args>
static void construct(Alloc& a, T* p, Args&&... args);

5 效果:调用

::new (static_cast<void*>(p)) T(std::forward<Args>(args)...).

并且根据同一文档第 191 页的第 11 条,new int() 必须将值设置为 0, vector 中的浪费实现是正确的。

问题是标准委员会是否真的希望构造调用的空参数包导致基本类型的行为从默认构造更改为值构造。

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