编译器错误 C3491
“var”:不能在非可变 lambda 中修改按值捕获
非可变 lambda 表达式不能修改通过值捕获的变量的值。
更正此错误
用
mutable
关键字声明 lambda 表达式,或者将该变量按引用传递到 lambda 表达式的捕获列表。
示例
下面的示例生成 C3491,因为非可变 lambda 表达式的主体修改了捕获变量 m
:
// C3491a.cpp
int main()
{
int m = 55;
[m](int n) { m = n; }(99); // C3491
}
下面的示例通过使用 mutable
关键字声明 lambda 表达式来解决 C3491:
// C3491b.cpp
int main()
{
int m = 55;
[m](int n) mutable { m = n; }(99);
}