直接调用和用对象调用
#include <iostream> #include <string> using namespace std; int main() { //定义并直接调用 []{cout << "hello1" << endl;}(); //定义并传递给对象,用对象调用 auto l = []{cout << "hello2" << endl;}; l(); getchar(); getchar(); return 0; }
有参数的lambda表达式
#include <iostream> #include <string> using namespace std; int main() { //有参数的lambda auto l1 = [](const string str) { cout << str << endl; }; l1("test1"); l1("test2"); getchar(); getchar(); return 0; }
指定返回值类型的lambda表达式
#include <iostream> #include <string> using namespace std; int main() { //指定返回类型的lambda auto l2 = []()->int { return 42.1; }; cout << l2() << endl; getchar(); getchar(); return 0; }参数类型
[=]意味着外部作用域是以by value方式传递给lambda.因此当这个lambda被定义时,你可以读取所有可读数据,但不能改动它们.[&]意味着外部作用域以by reference方式传递给lambda.因此当这个lambda被定义时,你对所有数据的改写动作都是合法的,前提是你拥有涂写它们的权力
#include <iostream> #include <string> using namespace std; #define L_VALUE(a) #a<<"="<<a int main() { int x = 0; int y = 42; auto qqq = [x, &y] () { cout << L_VALUE(x) << endl; cout << L_VALUE(y) << endl; ++y; }; x = y = 77; qqq(); qqq(); cout << "final " << L_VALUE(y) << endl; getchar(); getchar(); return 0; }
指定mutable关键字后,by value传入的参数会拥有修改权限,但是修改不会影响外部区域
#include <iostream> #include <string> using namespace std; #define L_VALUE(a) #a<<"="<<a int main() { int x = 0; auto qqq = [x] () mutable { cout << L_VALUE(x) << endl; ++x; }; x = 77; qqq(); qqq(); cout << "final " << L_VALUE(x) << endl; getchar(); getchar(); return 0; }