C ++奇怪的expression式编译得很好
为什么有下列有效的C ++expression式? 这些不是lambdaexpression式
[]{}(); {}[]{};
有人可以向我解释吗?
第一个是没有参数列表和后续调用的lambda。 []{}
等价于[](){}
所以整行等价于
[](){}();
第二个是一对大括号,它引入并立即closures一个范围,然后是一个没有使用参数列表的未使用的lambda定义:
{ // empty scope } []{}; // lambda
您可以参考http://en.cppreference.com/w/cpp/language/lambda了解lambda定义语法的变体。;
-
这是一个lambda调用
[]{}();
它相当于
[](){}();
-
第二个是空的范围,后面是一个(未使用的)lambda。
对于没有参数的lambda,Parens是可选的。