C ++奇怪的expression式编译得很好

为什么有下列有效的C ++expression式? 这些不是lambdaexpression式

[]{}(); {}[]{}; 

有人可以向我解释吗?

第一个是没有参数列表和后续调用的lambda。 []{}等价于[](){}所以整行等价于

 [](){}(); 

第二个是一对大括号,它引入并立即closures一个范围,然后是一个没有使用参数列表的未使用的lambda定义:

 { // empty scope } []{}; // lambda 

您可以参考http://en.cppreference.com/w/cpp/language/lambda了解lambda定义语法的变体。;

  • 这是一个lambda调用

     []{}(); 

    它相当于

     [](){}(); 
  • 第二个是空的范围,后面是一个(未使用的)lambda。

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