lambda表达式
很多语言都有增加了lambda表达式,我没想到c++也增加了,lambda表达式是一个不错的语法糖
基本结构
[] () mutable throw() -> int
{
}
捕获子句[]
这个东西是用来捕获外部变量的
不捕获任何变量
#include <iostream>
#include <string>
using namespace std;
int main() {
int a = 123;
auto func = []() {
cout << "hello lambda exp";
};
func();
return 0;
}
捕获一个变量
#include <iostream>
#include <string>
using namespace std;
int main() {
int a = 123;
auto func = [a]() {
cout << a;
};
func();
return 0;
}
捕获所有变量的拷贝
拷贝就说明变量在表达式内部只可读而不可更改(即使更改,这个更改也不会传递到外部),当然值传递只能捕获在lambda函数之前的变量
#include <iostream>
#include <string>
using namespace std;
int main() {
int a = 123;
int b = 456;
string c = "tinuv";
auto func = [ = ]() {
cout << a << "\n";
cout << b << "\n";
cout << c << "\n";
cout << d;
};
func();
return 0;
}
引用捕获
#include <iostream>
#include <string>
using namespace std;
int main() {
int a = 123;
int b = 456;
auto func = [ &a, &b ]() {
cout << a << "\n";
cout << b << "\n";
b = 10;
};
a = 678;
func();
cout << b;
return 0;
}
输出结果是
678
456
10
除此之外还可以捕获this指针,这主要在面向对象中使用,这里不介绍
mutable关键字
如果不使用mutable关键字的话,修改值传递的变量是会报错的,但如果使用mutable关键字的话就可以更改值传递的变量了,但是,即使修改了也==不能传递到外部==
#include <iostream>
#include <string>
using namespace std;
int main() {
int a = 123;
int b = 456;
auto func = [a, b]()mutable {
cout << a << "\n";
cout << b << "\n";
b = 10;
cout << b << "\n";
};
func();
cout << b;
return 0;
}
throw()子句
这里暂时不介绍
参数列表,返回类型,函数主体
都跟其他语言的差不多,就不多说了
??正文结束??