【问题标题】:Pass object to a function without wrapping it into std::ref, while argument is specified as a const reference将对象传递给函数而不将其包装到 std::ref 中,而参数被指定为 const 引用
【发布时间】:2020-09-03 04:01:51
【问题描述】:

我有以下 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的参数是const引用,

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

【问题讨论】:

  • some_vec 通过引用传递。这是已知和预期的行为。

标签: c++ ref


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-19
    • 1970-01-01
    • 2012-02-25
    • 2017-04-02
    • 1970-01-01
    相关资源
    最近更新 更多