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

时间:2016-06-20 12:27:01

标签: c++

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

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

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

2 个答案:

答案 0 :(得分:78)

第一个是没有参数列表和后续调用的lambda。 []{}相当于[](){},因此整行等同于

[](){}();

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

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

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

答案 1 :(得分:41)

  • 这是一个lambda调用

    []{}();
    

    等同于

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

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