此语法如何编译

How does this syntax compile?

本文关键字:编译 何编译 语法      更新时间:2023-10-16

我在搞砸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 声明符()