编译器错误 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);
}

另请参阅

Lambda 表达式