Mediumbind

Чем bind() отличается от лямбды?

1Постановка

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

2Решение

std::bind (C++11) создаёт callable с привязанными аргументами. В современном коде bind почти полностью заменён лямбдами — они читаемее, быстрее (компилятор инлайнит), типизированы локально.

void foo(int a, int b, int c);

// bind: привязка 42 ко второму аргументу
auto f1 = std::bind(foo, _1, 42, _2);
f1(1, 3);   // foo(1, 42, 3)

// лямбда — читаемее, эффективнее
auto f2 = [](int a, int c) { foo(a, 42, c); };
f2(1, 3);   // foo(1, 42, 3)
  • Лямбды поддерживают move capture, bind — нет;
  • bind остаётся в legacy и редких сценариях (nested bind, ref/cref);
  • Scott Meyers: «prefer lambdas over std::bind».

Современный C++ — почти всегда лямбда, std::function для хранения callable, bind почти не нужен.

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

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

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