Передача лямбда очень проста в С++ 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 ) {
}
Или объекты-функции каким-то образом проходят иначе, чем обычные структуры С++?