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 подскажет развёрнутый ответ в реальном времени.