将对象传递给函数而不将其包装到 std::ref 中,而参数被指定为 const 引用

Pass object to a function without wrapping it into std::ref, while argument is specified as a const reference

本文关键字:const 引用 参数 ref std 对象 函数 包装      更新时间:2023-10-16

我有以下c ++代码(只是一个问题的简单示例(

#include <iostream>
#include <string>
#include <vector>
double get_first(const std::vector<double>& vec) {
return vec[0];
}
int main()
{
std::vector<double> some_vec = {1, 2};
std::cout << get_first(some_vec);
}

所以这里的函数get_first参数是常量引用,

当我传递整个向量some_vec而不是将其包装到 std::ref 中时。c++ 会在此处复制完整对象吗?

std::ref不是为了这个。它用于将现有引用转换为对象,用于无法接受引用的情况,例如在std::vector<>中。这个想法是引用不能重新分配或设置为 null,因此 STL 容器中的内容(如移动等(不适用于原始引用。很可能它在内部将包装的引用转换为指针。

在您的示例中,参数会自动作为引用传递。