C++11引入了Lambda表达式。Lambda表达式的引入,方便了简短函数的定义,为经常使用的一次性函数的定义和使用提供了很大的便利。函数
Lambda表达式其实是一种匿名函数定义,经常使用来定义简单和不重复使用的函数。其可以使用的外部变量、定义方式等都与常规函数有所不一样。this
#语法结构# Lambda表达式的完整定义结构以下:指针
auto f = [函数对象参数](函数参数列表) mutable throw(类型)->返回值类型 {函数语句};
auto是C++11新引入的关键字,主要用来自动推断变量的类型,Lambda表达式返回一个函数指针,能够用通常的函数指针定义式来指示类型,可是在C++11中,使用auto更为简便。调用Lambda定义的函数,能够直接使用如下语句来调用:code
f(实参列表);
Lambda表达式的定义结构分为六个部分:对象
#基本示例#table
##基本Lambda表达式的使用##匿名函数
lang: cpp int x = 10; int y = 20; int z; z = [=](int a, int b) -> int { return (a + x) * (b + y); }(1, 2); cout << z << endl;
最后输出结果为242。Lambda表达式在定义以后能够直接使用()进行调用。变量
##函数指针的使用##语法
lang: cpp typedef int (*Func)(int&, int&); Func f = [](int& a, int& b) -> int { return a + b; };
这种方式定义的f跟前面用auto定义的f是一致的。调用方法也跟日常的函数指针一致。引用
##关于mutable##
lang: cpp int x = 1; int y = 1; int z; cout << "x1: " << x << "/t y1: " << y << endl; z = [=]() mutable -> int { int n = x + y; ++x; ++y; cout << "x2: " << x << "/t y2: " << y << endl; return n; }(); cout << "x3: " << x << "/t y3: " << y << endl; cout << "z: " << z << endl;
输出的结果为:
lang: cpp x1: 1 y1: 1 x2: 2 y2: 2 x3: 1 y3: 1 z: 2
mutable关键字只能在Lambda表达式定义体以内改变x和y的值,可是这种改变并不能传递到定义体以外。