c编程之路2Lamda的参数捕

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=


转载请注明:http://www.aierlanlan.com/rzfs/7074.html