c++ - std::move 参数按值传递
问题描述
我需要一些关于这段代码的帮助:
void foo(std::promise<std::string> p) {
try {
std::string result = "ok";
p.set_value(std::move(result));
} catch (...) {
std::current_exception();
}
}
int main() {
std::promise<std::string> promise;
std::future<std::string> f = promise.get_future();
std::thread t(foo, std::move(promise));
t.detach();
std::string res = f.get();
return 0;
}
std::move() 用法的含义是什么?是p
按值传递的(所以是副本)?
解决方案
p
是内部的局部变量foo
。Beforefoo
被调用,p
必须被创建。创建它有两种可能性:通过复制构造函数或移动构造函数。std::promise
是可移动的类,不能复制。所以创建它的唯一方法是调用promise(promise&&)
- 移动构造函数。经过
std::move(promise)
您正在转换p
为promise&&
,然后编译器可以选择从 mainpromise(promise&&)
移动到inside 。promise
p
foo
所以这里没有复制promise
。
推荐阅读
- jquery - 如何在 Laravel 中使用 AJAX 从 URL 正确加载数据
- javascript - 用于 API 节点 api 应用程序的不带 cookie 和会话的 cusrf
- javascript - 如何正确覆盖 XmlHttpRequest 以在标头上传递自定义键和值
- python - 如何从 hv.Dataset 创建分组条形图?
- arrays - 在 lodash 中使用 _.some
- mysql - 合并在空表的插入语句中不起作用
- scala - 具有高阶函数的火花过滤器
- angular - 使用 Angular DomSanitizer 清理 html
- python - 使用 NLTK 的对象标准化
- javascript - 如何将包含 Json 数据的变量传递给执行 javascript 关键字