我有一个接受 std::optional 的函数
void foo(const std::optional<T>& opt);
但是复制T
很贵。
这会创建 T
的拷贝吗? ?
如果是这样,我怎么能不创建拷贝呢?
最佳答案
正如您的后续评论所阐明的那样,您正在像这样调用函数 foo
:
T t;
...
foo({t});
在这种情况下,答案是肯定的。 t
的拷贝将被创建。为避免这种情况,您可以使用 std::reference_wrapper
来避免复制:
void foo(const std::optional<std::reference_wrapper<const T>> &optT) {
...
}
通过对函数进行这些更改,以相同方式调用它不会导致创建拷贝。
关于c++ - std::optional 参数是否创建拷贝?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45264601/