为什么以下有效的C ++表达式?这些不是lambdas
[]{}();
{}[]{};
有人可以向我解释一下吗?
答案 0 :(得分:78)
第一个是没有参数列表和后续调用的lambda。
[]{}
相当于[](){}
,因此整行等同于
[](){}();
第二个是一对括号,它引入然后立即关闭一个范围,然后是一个没有参数列表的未使用的lambda定义:
{
// empty scope
}
[]{}; // lambda
您可以参考http://en.cppreference.com/w/cpp/language/lambda了解lambda定义语法的变体。
答案 1 :(得分:41)
这是一个lambda调用
[]{}();
等同于
[](){}();
第二个是空范围,后跟一个(未使用的)lambda。
对于没有参数的lambda,Parens是可选的。