这个语法是如何编译的?

时间:2014-12-22 21:10:12

标签: c++ syntax lambda

我正在乱搞lambdas。对于那些不知道的人,他们看起来像这样:

[] () { };

我删除了括号,但仍然可以编译。

[] {};

这是怎么回事?

2 个答案:

答案 0 :(得分:3)

标准,

  

如果 lambda-expression 不包含 lambda-declarator,就好像 lambda-declarator 是{{1} }。

(C ++ 11中的[expr.prim.lambda] / 4)

答案 1 :(得分:3)

lambda声明符是可选的。 §5.1.2[expr.prim.lambda]

  

λ-表达式:
  lambda-introducer lambda-declarator opt compound-statement

lambda-declarator 的位置是:

  

λ-说明符:
  (parameter-declaration-clause)mutable opt
  异常规范 opt attribute-specifier-seq opt trailing-return-type opt

它也在§5.1.2/ 4中说;

  

如果 lambda-expression 不包含lambda声明符,那就好像 lambda-declarator ()