Maison >développement back-end >C++ >Quand et pourquoi utiliser le mot clé « mutable » dans C 11 Lambdas avec capture par valeur ?

Quand et pourquoi utiliser le mot clé « mutable » dans C 11 Lambdas avec capture par valeur ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-28 01:07:14990parcourir

When and Why Use the `mutable` Keyword in C  11 Lambdas with Capture-by-Value?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn