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++; }();
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!