Передача лямбда очень проста в С++ 11:
func( []( int arg ) {
// code
} ) ;
Но мне интересно, какова стоимость передачи лямбды такой функции? Что, если func передает лямбду другим функциям?
void func( function< void (int arg) > f ) {
doSomethingElse( f ) ;
}
Проходит ли лямбда дорого? Поскольку объект function
может быть назначен 0,
function< void (int arg) > f = 0 ; // 0 means "not init"
это заставляет меня думать, что функции объектов вроде действуют как указатели. Но без использования new
, то это означает, что они могут быть похожими на значения struct
или классы, которые по умолчанию соответствуют распределению стека и копии по типу.
Как С++ 11 "тело кода" и группа захваченных переменных передаются при передаче объекта функции "по значению"? Есть ли избыточная копия тела кода? Должен ли я отмечать каждый function
объект, переданный с помощью const&
, чтобы не была сделана копия:
void func( const function< void (int arg) >& f ) {
}
Или объекты-функции каким-то образом проходят иначе, чем обычные структуры С++?