编译如下:

[]{};

这也是:
[]() mutable {};

但是使用此代码,编译器会向我抛出错误消息:
[] mutable {};
   ^~~~~~~
error: lambda requires '()' before 'mutable'

有什么特别的原因吗?

最佳答案

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

Lambda表达式以Lambda引入程序(方括号)开头,后跟可选的Lambda声明符。

lambda声明符包含参数列表,可变变量,属性,异常说明符和返回类型。所有这些都是可选的,参数列表除外。因此,如果根本没有lambda声明符,则必须在括号中。

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

关于c++ - 为什么[] mutable {}无法编译?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40549722/

10-12 20:39