首页 >后端开发 >C++ >何时以及为何在带有按值捕获的 C 11 Lambda 中使用'mutable”关键字?

何时以及为何在带有按值捕获的 C 11 Lambda 中使用'mutable”关键字?

Susan Sarandon
Susan Sarandon原创
2024-11-28 01:07:14990浏览

When and Why Use the `mutable` Keyword in C  11 Lambdas with Capture-by-Value?

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn