按值捕获 Lambda:确保 C 0x 中捕获的非常量值
在 C 0x lambda 表达式中按值捕获时,捕获的值值自动保持恒定。如果您需要修改 lambda 中捕获的值,这可能会成为一个问题。
例如,考虑以下按值捕获 struct foo 的 lambda:
<code class="cpp">struct foo { bool operator() (const bool &a) { return a; } }; int main(int argc, char* argv[]) { foo afoo; auto bar = [=] () -> bool { afoo(true); }; return 0; }</code>
此代码将无法编译,因为 foo 的 operator() 方法被声明为 const。要解决此问题,您可以将operator()方法设置为非const:
<code class="cpp">struct foo { bool operator() (bool &a) { return a; } };</code>
但是,这并不总是一个理想的解决方案。在某些情况下,您可能希望按值捕获值,但仍确保它不会在 lambda 内被修改。
要实现此目的,您可以使用 mutable 关键字。通过将 lambda 声明为 [=] () 可变 -> bool,您允许 lambda 修改捕获的值。
示例:
<code class="cpp">auto bar = [=] () mutable -> bool { afoo(true); };</code>
在此示例中,lambda 现在可以修改捕获的 afoo 对象,甚至尽管它是通过值捕获的。
以上是按值捕获时如何修改 C 0x Lambda 中捕获的值?的详细内容。更多信息请关注PHP中文网其他相关文章!