C ++ future.get()返回类型

时间:2013-01-30 05:54:14

标签: c++ visual-c++ c++11 lambda

- 更新示例 -

以下是一些代码:

int retInt(int a) { return a; }
void randomFunction() 
{
    int a = 3;
    auto future = async([&]{ return retInt(a); });
    const auto ret = future.get();
}

VS2012 intellisense告诉我'ret'是const < error-type >并且不会让我编译,给我输出消息:

  

[不能从'void'推断'const auto'的类型]

例如,如果我将'ret'从const auto更改为const int并指定实际类型,一切都编译得很好,但我想知道为什么自动版本不起作用,如果有的话是一种可能的代码更改,以使版本具有自动编译。

有什么想法吗?

注意:

更改

  

auto future = async([&amp;] {return retInt(a);});

  

auto future = async([&amp;]() - &gt; int {return retInt(a);});

产生相同的结果

1 个答案:

答案 0 :(得分:2)

lambda表达式中有额外的[],这使得嵌入的lambda表达式。 inner lambda返回1但未指定outter lamda返回类型,默认为void。

变化

auto afuture = async([&]{ []{ return 1; }; });

为:

auto afuture = async( []{  return 1; });
const auto ret = afuture.get();

编辑:

您的新代码在VS2012 NOV CTP和gcc 4.7.2上运行正常。

注意: 您通过引用捕获局部变量a,它对异步线程是安全的,您可能希望按值捕获它。

auto future = async([=]{ return retInt(a); });
                    ^^^

编译的示例代码:

http://liveworkspace.org/code/X66xE $ 2