为什么[] mutable {}无法编译?

Ral*_*zky 7 c++ lambda mutable c++11

这编译:

[]{};
Run Code Online (Sandbox Code Playgroud)

这也是:

[]() mutable {};
Run Code Online (Sandbox Code Playgroud)

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

[] mutable {};
   ^~~~~~~
error: lambda requires '()' before 'mutable'
Run Code Online (Sandbox Code Playgroud)

有什么特别的理由吗?

Seb*_*edl 5

这只是语法在标准中编写方式的结果.我不知道这是否是一种疏忽.

lambda表达式以lambda导入器(括号)开头,后跟可选的lambda声明符.

lambda声明符包含参数列表,mutable,attributes,exception specifier和return type.除参数列表外,所有这些都是可选的.因此,如果存在lambda声明符,则括号必须在那里.

这就是为什么你不仅可以拥有mutable关键字.