Lamda表达式在c++中是一个十分好用并且被广泛应用的结构。如下所示,粗体部分就是一个Lamda表达式,它简洁高效,无需提供额外的函数定义,就可以完成各种函数才能完成的功能。
std::find_if(container.begin(),container.end(),[](intval){return0valval10;});
Lamda表达式的参数捕获
在c++11中,Lamda表达式有两种缺省的参数捕获方式:通过引用方式捕获和通过传值方式捕获。
通过传值方式捕获外部参数:
std::find_if(container.begin(),container.end(),[=](intval){return0valval10;});
通过引用方式捕获外部参数:
std::find_if(container.begin(),container.end(),[](intval){return0valval10;});
通过引用方式捕获外部参数需要注意的问题
通过引用方式捕获外部参数常发生的问题就是,Lamda表达式可能会包含一个指向局部变量的引用,当这样的Lamda表达式被调用后会导致未知行为,比如程序崩溃等。如下代码:
FilterContainerfilters;//ThefollowingcaseisOKfilters.emplace_bakc([](intvalue){returnvalue%5==0});//case2:thecasewillcauseareferencetoalocalvariablevoidaddDivisorFilter(){autocalc1=