为什么 []mutable{} 不编译?

Why does []mutable{} not compile?

这样编译:

[]{};

这也是:

[]() mutable {};

但是使用这段代码,编译器会向我抛出错误消息:

[] mutable {};
   ^~~~~~~
error: lambda requires '()' before 'mutable'

有什么特别的原因吗?

查看 n4296 中的第 5.1.2 [expr.prim.lambda] 节(这是 C++14 最终草案),这就是它脱离语法的方式。 mutable 只允许在 lambda-declarator - 其中包括方括号。整个 lambda 声明符是可选的(这就是为什么你可以省略括号)。

这只是标准中语法编写方式的结果。不知道是不是我的疏忽

lambda 表达式以 lambda 介绍符(括号)开头,后跟可选的 lambda 声明符。

lambda 声明符包含参数列表、可变、属性、异常说明符和 return 类型。所有这些都是可选的,除了参数列表。因此,如果完全存在 lambda 声明符,则必须有括号。

这就是为什么不能只有 mutable 关键字的原因。