首页 > 解决方案 > lambda 通过引用捕获更改没有可变关键字的变量

问题描述

[&]当 lambda 表达式是否通过 reference( ) 标记捕获时,mutable它仍然会更改值。但是按值捕获需要mutable改变对象。

int main(){
   int x = 10;
   auto ByValue = [x](){ --x; }; // error: decrement of read-only variable 'x'
   auto ByRef   = [&x](){ --x; }; //No Error
   auto ByValM  = [x]()mutable{ --x; }; // No error
   auto ByRefM  = [&x]()mutable{ --x; }; // No error
}

演示链接

为什么[&x](){ --x; };能够改变变量x?是通过引用捕获mutable隐含地标记了 lambda 表达式吗?

标签: c++lambda

解决方案


推荐阅读