此语法如何编译
How does this syntax compile?
我在搞砸lambdas。 对于那些不知道的人,它们看起来像这样:
[] () { };
我删除了括号,它仍然可以编译。
[] {};
怎么会这样?
Quoth the standard,
如果 lambda 表达式不包含 lambda 声明符,则就好像 lambda 声明符
()
一样。
([expr.prim.lambda]/4 in C++11(
lambda 声明符是可选的。 §5.1.2 [expr.prim.lambda]
lambda-expression:
lambda-introducer lambda-declaratoropt 复合语句
其中 lambda 声明符是:
lambda-declarator:
( 参数声明子句 ( 可变选项
异常规范 OPT 属性说明符序列 OPT 尾随返回类型OPT
它在 §5.1.2/4 中也说;
如果 lambda 表达式不包含 lambda 声明符,则就好像 lambda 声明符
()
。