C++奇怪的表达式编译得很好

Dea*_*ean 48 c++

为什么以下有效的C++表达式?这些不是lambdas

[]{}();
{}[]{};
Run Code Online (Sandbox Code Playgroud)

有人可以向我解释一下吗?

And*_*rew 78

第一个是没有参数列表和后续调用的lambda. []{}相当于[](){}整条线相当于

[](){}();
Run Code Online (Sandbox Code Playgroud)

第二个是一对大括号,它引入然后立即关闭一个作用域,然后是一个没有参数列表的未使用的lambda定义:

{
  // empty scope
}
[]{}; // lambda
Run Code Online (Sandbox Code Playgroud)

有关lambda定义语法的变体,可以参考http://en.cppreference.com/w/cpp/language/lambda.


Jar*_*d42 41

对于没有参数的lambda,Parens是可选的.