C++11学习笔记之Lambda表达式
写在前面
有人说C++11的诸多新特性让C++11变成了一种新的语言,也许吧,在我心里,C++永远是C++,不管它怎么变。
lambda表达式
先来看看lambda表达式的完整的结构吧。
[ capture ] ( params ) mutable exception attribute -> ret { body }
其中的:
1、capture就是用来捕获在lambda所在的作用域里头的变量的,没有被捕获的变量是不允许被使用的。
2、params就是这个函数的参数列表,这写参数在Lambda里面可以直接被使用。
3、mutable就是向编译器“打招呼”,被我捕获的变量是可以被我修改的啊。对比下面两张图片的信息:
看到mutable的作用了吧。。
4、exception就是用来说明Lambda表达式是否抛出异常以及抛出什么异常。
可以看到这里声明的是不抛出异常,但是这里依旧有异常抛出,所以程序系统直接接管了这个异常。
当你需要抛出异常时,可以这么做。。。
5、attribute 据说时用来声明属性的,具体怎么用,目前还不清楚,敬请见谅。
6、ret是用来声明返回值的类型的。
至此,lambda表达式基本的介绍就完了,下面介绍下lambda表达式的几个变体。
[ capture ] ( params ) -> ret { body }
//没有返回类型是因为auto关键字,可以自动推导类型
[ capture ] ( params ) { body }
[ capture ] { body }
不积跬步无以至千里,不积小流无以成江河。