Lambda Expressions
In C++11 and later, a lambda expression often called a lambda, is a convenient way of defining an anonymous function object (a closure) right at the location where it is invoked or passed as an argument to a function. Typically lambdas are used to encapsulate a few lines of code that are passed to algorithms or asynchronous methods.
Illustration of lambda
[=] () mutable throw() ->int {}
1 Capture Clause
[&] means all variables that you refer to are captured by reference, and [=] means they are captured by value. For example, if a lambda body accesses the external variable ‘total’ by reference and the external variable ‘factor’ by value, then the following capture clauses are equivalent:
Visual Studio 2017 version 15.3 and later (available with /std:c++17): The ‘this’ pointer may be captured by value by specifying *this in the capture clause.
2 Parameter List (optional)
In addition to capturing variables, a lambda can accept input parameters.
3 Mutable Specification (optional)
Typically, a lambda’s function call operator is const-by-value, but use of the mutable keyword cancels this out. It does not produce mutable data members. The mutable specification enables the body of a lambda expression to modify variables that are captured by value.
Because the variable n is captured by value, its value remains 0 after the call to the lambda expression. The mutable specification allows n to be modified within the lambda.
4 Exception Specification (optional)
You can use the ‘noexcept’ exception specification to indicate that the lambda expression does not throw any exceptions.
5 Return Type (optional)
The return type of a lambda expression is automatically deduced.
6 Lambda Body
The lambda body (compound-statement in the Standard syntax) of a lambda expression can contain anything that the body of an ordinary method or function can contain.