Maison >développement back-end >C++ >Quand et pourquoi utiliser le mot clé « mutable » dans C 11 Lambdas avec capture par valeur ?
Mot clé mutable dans les lambdas C 11 pour la capture par valeur
La capture par valeur dans les lambdas C 11 permet au lambda de capturer une variable de sa portée en faisant une copie. Cependant, par défaut, cette copie est marquée comme immuable, ce qui signifie que le lambda ne peut pas la modifier.
Raison d'être de la mutabilité
La raison de ce comportement par défaut découle du principe fondamental principe des objets fonction : ils doivent produire le même résultat à chaque appel. Si un lambda pouvait modifier une variable capturée, cela violerait ce principe.
En utilisant le mot-clé mutable, le programmeur déclare explicitement que le lambda peut modifier la variable capturée. Cet assouplissement est nécessaire car la capture par valeur a été conçue pour permettre aux utilisateurs lambda de modifier le temporaire capturé. Dans ce cas, il est logique d'autoriser la modification sous le contrôle du programmeur.
Exemple
Considérez l'extrait de code que vous avez fourni :
// ... // [=](){n = 10;}(); // Error: a by-value capture cannot be modified in a non-mutable lambda
Ce code générera une erreur car le lambda capture n par valeur et tente de le modifier sans utiliser le mot-clé mutable. Pour rendre ce code valide, utilisez mutable :
// ... [=]() mutable {n = 10;}();
Conclusion
Le mot-clé mutable en C 11 lambdas pour capture par valeur sert de rappel que la fonction les objets doivent généralement produire des résultats cohérents. Lorsqu'il est nécessaire de modifier une variable capturée, le mot-clé mutable le permet explicitement. En comprenant cette justification, les programmeurs peuvent utiliser efficacement les lambdas et éviter les erreurs potentielles.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!