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

标签 c++

和标题差不多。

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/

相关文章:

c++ - 处理导出到 QtScript 的函数中抛出的 C++ 异常

c++ - 当用于 Windproc 内部的参数时,HWND 地址会发生变化

c++ - 从 Eigen::Vector 转换为 Eigen::Affine3f

c++ - 如何检查 C++ 字符串是否为 int?

C++ 单例模板类使我的程序崩溃

c++ - 让球落在平面的边缘

c++ - 预期 'while' 或预期 '}'

c++ - "some"== "some\0"和 strcmp ("some","some\0") 在 C++ 中有什么区别?

c++ - 无法链接到 vtk 6.3/usr/bin/ld : cannot find -lvtkCommon

c++ - Qt: c++: 在 QTableView 中选择一行时如何创建 SIGNAL/SLOT