std :: optional参数是否创建副本?

时间:2017-07-23 11:34:17

标签: c++ reference copy optional optional-parameters

我有一个带std :: optional

的函数

void foo(const std::optional<T>& opt);

但是复制T是昂贵的。

这会创建T的副本吗?

如果是这样,我怎么能不创建副本?

1 个答案:

答案 0 :(得分:1)

我认为你会找到有用的this documentation page。请参阅“可选功能参数”部分。

当你调用函数并传递一个T的实例时,将构造一个可选项,它将拥有自己的T副本,因此它将调用T的复制构造函数。

int main()
{
  T t;
  optional<T> ot;
  foo(t);  // will create a copy
  foo(ot); // won't create a copy
}

为了能够在不创建副本的情况下调用foo并传递T,可以将foo声明为接收可选引用,即

void foo(optional<const T&> t)