Maison > développement back-end > C++ > Pourquoi la capture Lambdas C 11 par valeur est-elle mutable par défaut ?

Pourquoi la capture Lambdas C 11 par valeur est-elle mutable par défaut ?

DDD
Libérer: 2024-12-01 03:57:11
original
884 Les gens l'ont consulté

Why are C  11 Lambdas Capturing by Value Mutable by Default?

Mutabilité et capture par valeur Lambda en C 11

Les expressions Lambda en C 11 permettent la capture de variables externes, soit par référence ou par valeur. Cependant, lors d'une capture par valeur, le mot-clé mutable est requis par défaut. Cela a suscité des questions quant à sa nécessité, d'autant plus que le passage traditionnel des paramètres aux fonctions nommées ne nécessite pas de mutabilité.

La justification de la mutabilité

La principale différence réside dans le nature des lambdas en tant qu'objets de fonction. Ils sont conçus pour produire des résultats cohérents à chaque invocation. Si une expression lambda pouvait modifier ses variables capturées sans les déclarer comme mutables, elle violerait ce principe. En conséquence, la valeur par défaut du compilateur suppose que les variables de capture par valeur doivent rester inchangées.

Déclaration Mutable

Le mot-clé mutable permet la modification explicite de capture- variables par valeur dans une expression lambda. Il reconnaît que l'objet fonction est destiné à se comporter différemment en fonction de son état actuel. Par exemple, le lambda ci-dessous incrémente un compteur à chaque fois qu'il est exécuté :

int n = 0;
[mutable](){ n++; }();
Copier après la connexion

Implications et alternatives

L'exigence de mutabilité dans la capture par valeur garantit que les lambdas maintiennent un comportement déterministe. Cela élimine également le besoin de capture par référence dans de nombreux cas où la variable capturée n'est pas destinée à être modifiée en externe. Cependant, il convient de noter qu'une utilisation excessive de mutable peut nuire à la clarté du code et entraîner des effets secondaires potentiels.

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal