编译:
[]{};
这也是:
[]() mutable {};
但是使用这段代码,编译器会向我抛出错误消息:
[] mutable {};
^~~~~~~
error: lambda requires '()' before 'mutable'
有什么特别的原因吗?
答案 0 :(得分:5)
这只是语法在标准中编写方式的结果。我不知道这是否是一种疏忽。
lambda表达式以lambda介绍者(括号)开头,后跟可选的lambda声明符。
lambda声明符包含参数列表,mutable,attributes,exception specifier和return type。除参数列表外,所有这些都是可选的。因此,如果存在lambda声明符,则括号必须在那里。
这就是为什么你不能只拥有mutable关键字。
答案 1 :(得分:1)
查看n4296中的第5.1.2节[expr.prim.lambda](这是C ++ 14的最终草案),这就是它从语法中脱离出来的方式。 mutable
仅允许在 lambda-declarator 中 - 其中包含括号。整个lambda声明符是可选的(这就是为什么你可以省略括号)。