Mediumcallback
Что такое function pointer и чем он отличается от std::function?
1Постановка
Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.
2Решение
Function pointer — указатель на функцию, лёгкий, без состояния. `std::function` — type-erased обёртка над любым вызываемым (лямбды с capture, функторы), но с overhead.
void foo(int x) { /* ... */ }
// function pointer — лёгкий, без capture
void (*fp)(int) = &foo;
fp(42);
// std::function — принимает всё, включая лямбды с capture
int factor = 3;
std::function<void(int)> f = [factor](int x) {
std::cout << x * factor;
};
f(10);Function pointer — для C API и hot paths. std::function — для callback’ов с состоянием. Для лёгких callback’ов без capture эффективен шаблонный параметр.
3Как отвечать
- Сначала уточните условия и ограничения, покажите аналитическое мышление.
- Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
- Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡
На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.