C ++ lambda里面有一个函数调用

时间:2013-07-17 21:05:52

标签: c++11 lambda

以下lambda表达式代码无法在VC ++ 2010中编译。

void error_check() {}

int main()
{
    vector<int> v(10);
    std::generate(v.begin(), v.end(), [](){ //either add -> int, 
        error_check(); //or comment this out to compile
        return rand()%99; });
}

编译器说“已经指定具有void返回类型的lambda不能返回值。”但是,如果我明确指定了返回类型或注释error_check();,则代码编译正常。

我读到单个return语句可以省略返回类型部分。那为什么需要上面的呢?

1 个答案:

答案 0 :(得分:0)

在C ++ 11中,lambda(或constexpr函数)所需的“单一返回语句”意味着return表达式;仅为 函数定义中的东西。所以你不能在return语句之前有额外的声明。

C ++ 1y会对这类事情更加慷慨,并且应该允许代码发布。

除了继续并添加尾随返回类型之外,您还可以使用逗号运算符解决此问题:

[](){
    return (error_check(), rand()%99);
}