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