0

以下 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();代码编译得很好。

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

4

1 回答 1

0

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

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

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

[](){
    return (error_check(), rand()%99);
}
于 2013-07-17T21:10:42.707 回答