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