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