Здрасте. Заметил, что С++11 — ые лямбды очень удобно использовать в качестве вложенных функций. Вот так:
int get_something(const SomeStruct& given)
{
// Считаем что-то большое, большой контекст локальных переменных.
// ...
auto calculate_some = [&](int val)
{
// Считаем что-то из val, учитывая контекст внешней функции
// ...
};
// Используем эту вложенную функцию несколько раз
calculate_some(1);
calculate_some(2);
calculate_some(10);
// Какой-то результат
return 1;
}
То есть суть тривиальна — полноценная вложенная функция с захватом контекста. Все работает. Однако меня беспокоит наличие потенциальных накладных расходов, связанных с таким подходом:
1. Может ли эта функция заинлайниться?
2. Дорого ли передавать "[&]" в качестве контекста? Просто передается указатель на стек или это может быть дороже?
3. Дорога ли сама иницализация лямбда-функтора? Понятно, что она вызывается единожды за вызов основной функции, но все же.
4. Какие еще могут быть подводные камни?