Краткий пример:
#include <iostream>
int main()
{
int n;
[&](){n = 10;}(); // OK
[=]() mutable {n = 20;}(); // OK
// [=](){n = 10;}(); // Error: a by-value capture cannot be modified in a non-mutable lambda
std::cout << n << "\n"; // "10"
}
Вопрос: зачем нам mutable
ключевое слово? Это сильно отличается от традиционной передачи параметров в именованные функции. Что обоснование позади?
У меня сложилось впечатление, что весь смысл захвата по значению состоит в том, чтобы позволить пользователю изменить временное - иначе мне почти всегда лучше использовать захват по ссылке, не так ли?
Какие-нибудь просветления?
(Я использую MSVC2010, кстати. AFAIK это должно быть стандартным)
const
по умолчанию.
const
по умолчанию!