I am learning C++14 lambdas with const, and today my friend showed me the following. I could not understand it.
Is it a lambda function? The syntax does not matches what I see usually.
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.
Lambda is a compute service that lets you run code without provisioning or managing servers.
AWS Lambda is a service which computes the code without any server. It is said to be serverless compute. The code is executed based on the response of events in AWS services such as adding/removing files in S3 bucket, updating Amazon DynamoDB tables, HTTP request from Amazon API Gateway etc.
The lambda functions defined above are like single-line functions. These functions do not have parenthesis like the def defined functions but instead, take parameters after the lambda keyword as shown above. There is no return keyword defined explicitly because the lambda function does return an object by default.
I wanted to know what is 1. and why 2. fails to compile.
(1)
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
.
(2)
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
).
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