在C ++ 11中传递lambda非常容易:
func( []( int arg ) {
// code
} ) ;
但是我想知道,成本是什么将lambda传递给这样的函数?如果func将lambda传递给其他函数怎么办?
void func( function< void (int arg) > f ) {
doSomethingElse( f ) ;
}
lambda的传递是否昂贵?由于function
对象can被分配为0,因此>
function< void (int arg) > f = 0 ; // 0 means "not init"
这使我认为函数对象有点像指针。但是,如果不使用
new
,则意味着它们可能类似于值类型的struct
或类,它们默认为堆栈分配和成员级复制。
当您通过“按值”传递函数对象时,如何传递C ++ 11的“代码体”和捕获的变量组?代码主体是否有很多多余的副本?我是否应该标记每个通过function
传递的const&
对象,以便不进行复制:
void func( const function< void (int arg) >& f ) { }
或者函数对象以某种方式与常规C ++结构传递不同?
通过lambda在c ++ 11中非常容易:func([](int arg){//代码});但是我想知道,将lambda传递给这样的函数的成本是多少?如果func将lambda传递给...
Disclaimer:
lambda表达式就是这样:一个表达式。编译后,将在运行时导致关闭对象。
5.1.2 Lambda表达式[expr.prim.lambda]
其余部分取决于实施,但我不用担心。最简单的实现只是携带信息。与您在捕获中所要求的完全一样。因此,效果与手动创建类的效果相同。或使用一些std :: bind变体。