c++ - std::optional 参数是否创建拷贝?

标签 c++ reference copy option-type optional-parameters

我有一个接受 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/

相关文章:

java - 有没有办法在 Java 中强制对弱和/或软引用对象进行 GC?

c# - 如何从一维数组中获取特定部分的数据?

c++ - 复制具有多态内容的 std::unique_ptr 的 std::map

c++ - 模板成员函数指针

c++ - C++ 中的 FreeRTOS 更改任务内存?

c++ - pair.first 是否返回对第一个值的引用?

linux - 创建新文件夹并将 '/var/www/' 中存在的所有文件和文件夹复制到其中以备份所有代码文件的 Linux 命令是什么?

c++ - 编译器如何选择正确的重载函数?

c++ - 当 v 大于 INT_MAX 时,std::distance(v.begin(), v.end()) 的结果是什么?

reference - 当函数需要引用闭包参数时,如何将函数用作闭包?