Maison > développement back-end > C++ > Comment capturer par valeur et modifier les variables capturées dans les expressions C Lambda ?

Comment capturer par valeur et modifier les variables capturées dans les expressions C Lambda ?

Linda Hamilton
Libérer: 2024-11-03 11:12:29
original
655 Les gens l'ont consulté

How to Capture by Value and Modify Captured Variables in C   Lambda Expressions?

Capture Lambda et constance en C 0x

Une question courante se pose lorsque l'on travaille avec des expressions lambda en C 0x : existe-t-il un moyen de capturer par valeur et en même temps empêcher la valeur capturée d'être const ?

La norme du langage C spécifie que les expressions lambda qui capturent les variables par valeur le font de manière const. Cela signifie que la valeur capturée ne peut pas être modifiée à l'intérieur du lambda. Cependant, dans certains scénarios, il peut être nécessaire de capturer une variable par valeur tout en modifiant sa valeur.

Par exemple, considérons un foncteur de bibliothèque avec une méthode Operator() non const que nous voulons capturer et appelle une lambda. Le code suivant ne sera pas compilé :

<code class="cpp">struct foo
{
  bool operator () ( const bool &amp; a )
  {
    return a;
  }
};

int main()
{
  foo afoo;

  auto bar = [=] () -> bool
    {
      afoo(true);
    };

  return 0;
}</code>
Copier après la connexion

L'erreur ici est que l'opérateur() de l'expression lambda est déclaré comme const en raison de la liste de capture [=] environnante. Pour résoudre ce problème, nous pouvons utiliser le mot-clé mutable. En ajoutant mutable à la liste de capture lambda, nous permettons au lambda de modifier les variables capturées, même celles capturées par valeur :

<code class="cpp">auto bar = [=] () mutable -> bool
    {
      afoo(true);
    };</code>
Copier après la connexion

Cette modification rend l'opérateur () du lambda non const, nous permettant d'appeler le non -const Operator() de l'objet afoo.

Par conséquent, pour capturer par valeur dans une expression lambda et empêcher la valeur capturée d'être const, utilisez le mot-clé mutable dans la liste de capture. Cela permet au lambda de modifier la variable capturée sans provoquer d'erreurs de compilation.

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal