C 11 Lambda 中用于按值捕获的可变关键字
C 11 lambda 中的按值捕获允许 lambda 捕获通过复制将变量从其范围中删除。但是,默认情况下,此副本被标记为不可变,这意味着 lambda 无法修改它。
可变性的基本原理
这种默认行为的原因源于基本原理函数对象的原则:每次调用它们时都应该产生相同的结果。如果 lambda 可以修改捕获的变量,就会违反此原则。
通过使用 mutable 关键字,程序员显式声明 lambda 可以修改捕获的变量。这种放松是必要的,因为按值捕获的目的是允许 lambda 用户更改捕获的临时值。在这种情况下,允许在程序员的控制下进行修改是有意义的。
示例
考虑您提供的代码片段:
// ... // [=](){n = 10;}(); // Error: a by-value capture cannot be modified in a non-mutable lambda
此代码将引发错误,因为 lambda 正在按值捕获 n 并尝试在不使用 mutable 关键字的情况下修改它。要使此代码有效,请使用 mutable:
// ... [=]() mutable {n = 10;}();
结论
C 11 lambda 中用于按值捕获的可变关键字提醒您,函数对象通常应该产生一致的结果。当需要修改捕获的变量时,mutable 关键字明确允许它。通过理解这个基本原理,程序员可以有效地使用 lambda 并避免潜在的错误。
以上是何时以及为何在带有按值捕获的 C 11 Lambda 中使用'mutable”关键字?的详细内容。更多信息请关注PHP中文网其他相关文章!