以下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语句可以省略返回类型部分。那为什么需要上面的呢?
答案 0 :(得分:0)
在C ++ 11中,lambda(或constexpr
函数)所需的“单一返回语句”意味着return
表达式;
仅为 函数定义中的东西。所以你不能在return语句之前有额外的声明。
C ++ 1y会对这类事情更加慷慨,并且应该允许代码发布。
除了继续并添加尾随返回类型之外,您还可以使用逗号运算符解决此问题:
[](){
return (error_check(), rand()%99);
}