Mediumcallback

Чем function pointer отличается от лямбды?

1Постановка

Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.

2Решение

Function pointer — указатель на функцию, не хранит состояние. Лямбда — анонимный функтор (класс с operator()), может иметь capture — хранить состояние.

// Function pointer — без состояния
void (*fp)(int) = &someFunc;

// Лямбда с capture — хранит состояние
int factor = 3;
auto mul = [factor](int x) { return x * factor; };  // захватывает factor

// Лямбда без capture конвертируется в function pointer
void (*fp2)(int) = [](int x) { std::cout << x; };
  • У каждой лямбды свой уникальный тип, даже при одинаковых сигнатурах;
  • Лямбда с capture не конвертируется в function pointer (нужна std::function или шаблон);
  • Function pointer — для C API; лямбда — для callback’ов с контекстом, STL-алгоритмов.

В новом коде лямбды почти вытеснили hand-written функторы и function pointers.

3Как отвечать

  • Сначала уточните условия и ограничения, покажите аналитическое мышление.
  • Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
  • Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡

На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.