This was originally part of this question:
Passing lambda declared using auto-keyword by non-const reference as argument to std::function parameter type
but I decided to make it a separate one.
In what circumstances is it better/more idiomatic to pass a lambda or other function object by reference or value?
The mutable keyword is used so that the body of the lambda expression can modify its copies of the external variables x and y , which the lambda expression captures by value. Because the lambda expression captures the original variables x and y by value, their values remain 1 after the lambda executes.
There are references in C, it's just not an official language term like it is in C++. "reference" is a widely used programming term that long predates the C++ standardizing of it. Passing a pointer to an object is passing that object by reference.
Permalink. All the alternatives to passing a lambda by value actually capture a lambda's address, be it by const l-value reference, by non-const l-value reference, by universal reference, or by pointer.
A mutable object's value can be changed when it is passed to a method. An immutable object's value cannot be changed, even if it is passed a new value. “Passing by value” refers to passing a copy of the value. “Passing by reference” refers to passing the real reference of the variable in memory.
You use the same rules for "lambda"s that you would for any object that you take as a parameter.
A function should use non-const reference if the intent of the function is to modify the object for the caller. The function should use const&
if it is just using the object without changing it. And it should pass by value if it is going to copy/move the object into its internal storage.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With