几乎与标题一样.
规范std::vector<T>::resize似乎要求src通过值传递对象:
void resize(size_type n, T src = T() );
Run Code Online (Sandbox Code Playgroud)
为什么不是对这里使用的常量对象的引用呢?
void resize(size_type n, T const& src = T() );
Run Code Online (Sandbox Code Playgroud)
例如,在这个问题中,由于在堆栈上创建了临时对象,传值方面似乎会导致堆栈溢出问题.
如果引用了一个引用src,我们至少可以通过在堆上分配一个临时引用来解决问题::resize().
它似乎::resize()与其他成员函数不一致std::vector.例如,构造函数按预期获取src对象const&:
vector (size_type n, T const& src = T(), Allocator const& = Allocator() );
Run Code Online (Sandbox Code Playgroud)
编辑:我挖出c++03标准,并仔细检查上面的函数原型没有错误引用...
这是标准库规范中的一个错误.它在C++ 11中修复; std::vector现在有两个resize成员函数声明为:
void resize(size_type sz);
void resize(size_type sz, const T& c);
Run Code Online (Sandbox Code Playgroud)
两者之间的区别在于,如果在调整大小后容器的大小较大,则第一个重载值初始化新元素,而第二个副本构造它们; 此模式也用于其他成员函数和其他容器.