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 de l' mutable
mot-clé? Il est tout à fait différent du traditionnel passage de paramètres à des fonctions nommées. Quelle est la logique derrière?
J'étais sous l'impression que le point de l'ensemble de la capture-par-valeur est de permettre à l'utilisateur de modifier le temporaire -- sinon, je suis presque toujours préférable d'utiliser la capture par référence, n'est-ce pas?
Tout enlightenments?
(Je suis en utilisant MSVC2010 par la voie. Autant que je sache, ce devrait être la norme)