lambda capture by reference changes variable without mutable keyword

Viewed 59

When lambda expression's captures by reference( [&] ) marking mutable or not it still changing the value. But capturing by value needs mutable to change the object.

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
}

link to the demo

Why [&x](){ --x; }; is able to change the variable x? Is it that capturing by reference marks the lambda expression mutable implicitly?

0 Answers
Related