Rozumiem funkcję lambda i jej cel w C++ 11. Ale nie rozumiem różnicy między "Przechwytywaniem wartości" i "Podawaniem argumentu". np ..Różnica między przechwytywaniem a przekazywaniem argumentów w funkcjach lambda
#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";
}
Wyjście powyższego kodu jest taka sama jak poniżej kod ..
#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";
}
jest przechwytywanie wartość jest podobna jak przepuszczenie wartość jako argument? lub przechwytywanie ma jakieś specjalne znaczenie?
Przechwyt jest najbardziej podobny do członka klasy niż argument. – Jarod42
Jedna różnica polega na tym, że przechwytywanie następuje, gdy lambda jest tworzona, podczas gdy przekazywanie wartości następuje po wywołaniu lambda. Jestem całkiem nowy w C++ 11, więc zajmie mi to trochę czasu, aby wymyślić przykład ilustrujący rzeczywiste różnice. –
Przez przechwycenie czegoś skutecznie wiążesz dane z lambdą. Dzięki temu można łatwo ominąć kombinację danych + lambda w dowolnym miejscu. – Kyle