为什么 []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 关键字的原因。
这样编译:
[]{};
这也是:
[]() 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 关键字的原因。