首页 > 解决方案 > 将对象传递给函数而不将其包装到 std::ref 中,而参数被指定为 const 引用

问题描述

我有以下 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++ 是否在此处复制完整对象?

标签: c++ref

解决方案


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

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


推荐阅读