(Я прочитал Каков срок жизни неявных функторов, производных от лямбда в C ++? уже и не дает ответа на этот вопрос.)
Я понимаю, что синтаксис лямбда C ++ - это просто сахар для создания экземпляра анонимного класса с оператор вызова и некоторое состояние, и я понимаю требования к продолжительности жизни этого состояния (в зависимости от того, захватываете ли вы по значению по ссылке.) Но каково время жизни самого лямбда-объекта? В следующем примере будет ли полезен возвращенный экземпляр std :: function
?
std::function meta_add(int x) {
auto add = [x](int y) { return x + y; };
return add;
}
Если да, как он работает ? Мне это кажется слишком большим волшебством - я могу только представить, что он работает, std :: function
копируя весь мой экземпляр, что может быть очень тяжелым в зависимости от того, что я захватил - в прошлом я использовал std :: function
в основном с голыми указателями на функции, и их можно быстро скопировать. Это также кажется проблематичным в свете стирания типа std :: function
.