Mediumlambda
Чем mutable lambda отличается от обычной?
1Постановка
Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.
2Решение
По умолчанию operator() лямбды — const, поэтому captured-by-value поля нельзя менять. mutable разрешает менять захваченные по значению поля.
int x = 0;
// auto bad = [x]() { x = 5; }; // ошибка: operator() const
auto counter = [x]() mutable {
return ++x; // меняет свою копию x при каждом вызове
};
counter(); // 1
counter(); // 2 — состояние сохраняется
std::cout << x; // 0 — оригинал не изменился (это копия)- Изменение в captured-by-value не влияет на оригинал в enclosing scope — это копия;
- captured-by-reference всегда «изменяемо» (через ссылку),
mutableне нужен; - Применение: счётчики, mutable state в callback’ах (генератор id при каждом вызове).
3Как отвечать
- Сначала уточните условия и ограничения, покажите аналитическое мышление.
- Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
- Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡
На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.