Лямбды в качестве вложенных функций.
От: Went  
Дата: 08.05.15 09:45
Оценка:
Здрасте. Заметил, что С++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. Какие еще могут быть подводные камни?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.