我有一个带std :: optional
的函数 void foo(const std::optional<T>& opt);
但是复制T
是昂贵的。
这会创建T
的副本吗?
如果是这样,我怎么能不创建副本?
答案 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)