C++11引入的Lambda表达式可以快速的得到某些只调用1次的函数,可以理解成匿名函数,方便阅读时直接了解到调用函数的功能。
注意在例如cb、dev中编译设置要有-stdc++11,因为这是11的标准,这个表达式可以结合着auto一起用
实验Code:
#include <bits/stdc++.h>
using namespace std;
//lambda表达式
//匿名函数
class test
{
public:
void hello() {
cout << "test hello\n";
};
void lambda() {
auto fun = [this]{ // 捕获了 this 指针
this->hello(); // 这里 this 调用的就是 class test 的对象了
};
fun();
}
};
int main() {
//example_1
int arr[10] = {1,2,3,4,5,6,7,8,9,10};
int sum = 0;
for (int i = 0; i < 10; i++) {
sum += [](int n) {return n%2?n:0;}(arr[i]);
}
printf("%d\n\n", sum);
//example_2
float f = -3.5;
cout << [](float f){return fabs(f);}(f) << endl;
cout << [](float d)->int{return fabs(d);}(f) << endl; //指定返回值类型
cout <<endl;
//example_3
int i = 2, j = 3;
cout << "external = " << &i << endl;
cout << "external = " << i << endl;
cout << "external = " << &j <<endl;
cout << "external = " << j << endl;
cout << endl;
auto p = [=, &i]{
cout << "internal = " << &i << endl;
cout << "internal = " << i << endl;
cout << "internal = " << &j <<endl;
cout << "internal = " << j << endl;
cout <<endl;
};
p(); //调用方法1 类似于函数指针
[=]{
cout << "internal = " << &i << endl;
cout << "internal = " << i << endl;
cout << "internal = " << &j <<endl;
cout << "internal = " << j << endl;
cout << endl;
}();//调用方法2 一次匿名函数
[i,&j]{
cout << "internal = " << &i << endl;
cout << "internal = " << i << endl;
cout << "internal = " << &j <<endl;
cout << "internal = " << j << endl;
cout << endl;
}();//指定拷贝、引用
//example_4
test t;
t.lambda(); //this捕获
return 0;
}