和标题差不多。
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/