gpt4 book ai didi

c++ - 为什么 std::vector::resize(n, src) 按值传递?

转载 作者:可可西里 更新时间:2023-11-01 18:28:44 26 4
gpt4 key购买 nike

和标题差不多。

std::vector<T>::resize 的规范似乎需要 src对象按值传递:

void resize(size_type n, T src = T() );

为什么这里不使用对常量对象的引用?

void resize(size_type n, T const& src = T() );

例如,在 this question 中,由于在堆栈上创建临时对象,按值传递方面似乎会导致 stackoverflow 问题。

如果引用 src相反,我们至少可以通过在堆上分配一个临时文件来解决这个问题,该临时文件通过引用传递给 ::resize() .

似乎::resize()std::vector 的其他成员函数不同步.例如,构造函数采用 src对象 const&正如预期的那样:

vector (size_type n, T const& src = T(), Allocator const& = Allocator() );

编辑:我挖出了 c++03标准和双重检查上面的函数原型(prototype)没有被错误引用...

最佳答案

它是 a mistake in the Standard Library specification .它在 C++11 中得到修复; std::vector 现在有两个 resize 成员函数声明为:

void resize(size_type sz);
void resize(size_type sz, const T& c);

两者的区别在于,如果resize后容器的尺寸变大,第一个重载值初始化新元素,第二个copy构造新元素;此模式也用于其他成员函数和其他容器。

关于c++ - 为什么 std::vector::resize(n, src) 按值传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7439475/

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