缘由:有几个新手私信我,看到C++里面出现了 [](){ 代码块 }这类写法不知所云。
解答:总而言之就是C++11的新特性,Lambda函数。
其实这个lambda函数并不是C++首创的。
其实还有一个异常捕捉throw()我就不写上去了。
解释一下:
1,捕捉列表
捕捉列表总是作为lambda的开始,即出现于lambda的开始处。它是lambda的引出符(即开始标志)。编译器可以根据该“标志”来作出判断出该函数是否为lambda函数。同时“捕捉列表”能够捕捉上下文中的变量以作为lambda函数使用。
[var ] 表示以值传递方式捕捉变量var
[ = ] 表示值传递捕捉所有父作用域变量
[&var] 表示以引用传递方式捕捉变量var
[ & ] 表示引用传递捕捉所有父作用域变量
[this] 表示值传递方式捕捉当前的this指针
还有一些组合:
[=,&a] 表示以引用传递方式捕捉a,值传递方式捕捉其他变量
注意:
捕捉列表不允许变量重复传递,
如:[=,a]、[&,&this],会引起编译时期的错误
2,参数列表
略,跟普通函数的参数列表一样,无参数时,可以连同"()"省略掉
3,mutable修饰符
在默认的情况下,lambda函数返回值用const修饰,而当我们在参数列表后面注明了“mutable”关键字之后,则可以取消其常量性质。若在lambda中使用了mutable修饰符,则“参数列表”是不可省略掉的(即使是参数为空)。
4,返回值类型
略,你懂的
5,函数体
略,你也懂的