Petit exemple:
#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"
}
La question: pourquoi avons-nous besoin du mutable
mot-clé? C'est assez différent du passage de paramètres traditionnel aux fonctions nommées. Quelle est la justification derrière?
J'avais l'impression que tout l'intérêt de la capture par valeur était de permettre à l'utilisateur de modifier le temporaire - sinon je ferais presque toujours mieux d'utiliser la capture par référence, n'est-ce pas?
Des éclaircissements?
(J'utilise MSVC2010 au fait. AFAIK cela devrait être standard)
const
par défaut.
const
par défaut!