I understand the lambda function and the purpose of it in c++ 11. But i do not understand the difference between "Capturing the value" and "Passing an argument". For Instance..
#include <iostream>
#include <functional>
using namespace std;
int add(int a,int b){
return a+b;
}
int main(int argc, char** argv){
function <int(int,int)> cppstyle;
cppstyle = add;
auto l = [] (function <int(int,int)> f,int a, int b) {return f(a,b);};
cout << l(cppstyle,10,30) <<"\n";
}
The output of the code above is same as the code below..
#include <iostream>
#include <functional>
using namespace std;
int add(int a,int b){
return a+b;
}
int main(int argc, char** argv){
function <int(int,int)> cppstyle;
cppstyle = add;
auto l = [cppstyle] (int a, int b) {return cppstyle(a,b);};
cout << l(10,30) <<"\n";
}
Is "capturing a value" similar to "passing a value as an argument"? or capture has some special meaning?
The difference between a captured argument and a passing argument could be seen with an analogy. Consider the following function object:
In function object class
Capture
there are two member variablesi
andj
. There's also overloadedoperator()
which takes two input arguments. Now consider the following lambda:The member variables of class
Capture
are in analogy with the lambda capture (i.e.,[&i, j]
), whereas input arguments of overloadedoperator()
a
andb
are in analogy with input argumentsa
andb
of the lambda shown above.That is, if you consider a lambda as a function object, its capture is the state of the function object (i.e., its member variables) whereas its input arguments would be the input arguments of the overloaded
operator()
.