【发布时间】:2013-01-21 18:05:29
【问题描述】:
我在 MSVC 2012 中遇到了右值引用的问题。
#include <thread>
#include <string>
#include <future>
void foo(std::promise<std::string> &&prms) { /* some code */ }
int main() {
std::promise<std::string> prms;
// std::future<std::string> ftr = prms.get_future();
std::thread th(&foo, std::move(prms));
// some other code
}
编译器说:error C2664: 'void (std::promise<_ty> &&)' : cannot convert parameter 1 from 'std::promise<_ty>' to 'std::promise<_ty> && '
是我的错误(然后如何解决)或编译器问题(然后我想知道这种行为的起源)?
【问题讨论】:
-
@KerrekSB - 实际上,这是来自 Bartocz Milewski 的代码示例。看看his post(future 部分)。我想知道为什么我不能编译它。
-
我想知道为什么 Bartocz 试图兑现这个承诺。
-
@LightnessRacesinOrbit - 我猜,这是一种解决超出范围问题的方法。如果左值引用
promise,则可能会出现问题 -
@Loom:这不会破坏未来吗?
-
@Loom: 嗯.. 好吧,Bartosz 的
asyncFun信守承诺。试试看。你是对的,这只有在线程是从右值引用构造的情况下才有效,因此你的原始函数与右值引用 should 也可以工作。
标签: c++ multithreading rvalue-reference visual-c++-2012 stdthread