gpt4 book ai didi

c++ - 为什么在C++ 11中,我们从vector::resize中的一个函数移至2个版本?

转载 作者:行者123 更新时间:2023-12-02 09:53:11 24 4
gpt4 key购买 nike

我问这个问题是因为我正在开发一个类库。
(如我在cplusplus.com中所见),在C++ 98中,我们只有 std::vector::resize 函数的一个版本:

void resize (size_type n, value_type val = value_type());
这样,如果您想指定第二个参数,该函数将起作用。但是在C++ 11中,他们将其更改为2个不同的版本:
void resize (size_type n);
void resize (size_type n, const value_type& val);
有什么特殊原因吗?

最佳答案

对于 std::vector::resize ,在C++ 11之前,val的默认参数始终是值初始化的,从中复制附加的元素,因为它们也会被值初始化。从C++ 11开始,可以通过提供自定义的分配器来避免这种情况。

  1. additional default-inserted elements are appended (since C++11)

(强调我的)

By default, this will call placement-new, as by ::new((void*)p) T() (that is, value-initialize the object pointed to by p). If value-initialization is undesirable, for example, if the object is of non-class type and zeroing out is not needed, it can be avoided by providing a custom Allocator::construct.

关于c++ - 为什么在C++ 11中,我们从vector::resize中的一个函数移至2个版本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62668913/

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