Simple lambda function I could not understand

  • A+

I am learning C++14 lambdas with const, and today my friend showed me the following. I could not understand it.

  1. Is it a lambda function? The syntax does not matches what I see usually.

  2. it syntax matches with a lambda function, but it fails with a long error.

int main() {     // 1.     const auto x = [&]{         auto l = 0;         l = 99;         return l;     }();      std::cout << x << endl;      // 2.         const auto y = [&](){         auto l = 0;         l = 99;         return l;     };      std::cout << y << endl;         return 0; } 

I want to know what 1 is, and why 2 fails to compile.


I wanted to know what is 1. and why 2. fails to compile.


const auto x = [&]{         auto const_val = 0;         const_val = 99;         return const_val;     }(); // ..^^  <--- execution 

This is the definition and execution of a lambda that doesn't receive arguments (so the () part after [&] is optional and, in this case, omitted).

So x is an int (a const int) initialized with 99 (the value returned by the lambda)

As you can see, the name const_val for the integer variable inside the lambda is a fake, because the variable is intialized with 0 and then modified assigning to it the value 99.


const auto y = [&](){ auto l = 0; l = 99; return l; }; 

This is the definition only (no execution) of a lambda that receive no arguments.

So y is a variable (well, a constant) that contain the lambda and when you write

std::cout << y << endl;  

you get an error because isn't defined the output for a lambda; you should try with

std::cout << y() << endl; 

to execute the lambda and print the returned value (again 99).


:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: