Maison > développement back-end > C++ > le corps du texte

La capture Lambda par valeur est-elle toujours constante en C 0x ?

Linda Hamilton
Libérer: 2024-10-30 19:42:30
original
253 Les gens l'ont consulté

Is Lambda Capture by Value Always Constant in C  0x?

Capture Lambda par valeur toujours constante en C 0x ?

Ce problème survient lorsque vous tentez de capturer une valeur par référence mais modifiez son contenu dans une expression lambda. Le compilateur traite les valeurs capturées comme des constantes par défaut, garantissant qu'elles restent inchangées. Cependant, certains scénarios peuvent nécessiter un accès non constant aux valeurs capturées.

Comprendre la capture par valeur :
En C 0x, les fonctions lambda peuvent capturer des variables par valeur ou par référence. Lors de la capture par valeur, une copie de la variable est créée dans la portée du lambda, permettant une modification au sein du lambda. Cependant, par défaut, les copies capturées sont traitées comme constantes, empêchant leur modification.

Mot-clé mutable à la rescousse :
Pour surmonter cette limitation, le mot-clé mutable peut être utilisé. En ajoutant mutable à la liste des paramètres d'un lambda, nous déclarons explicitement la valeur capturée comme modifiable dans la portée du lambda. Cela permet un accès non const à la valeur capturée, résolvant ainsi le problème décrit dans l'extrait de code fourni.

Exemple :
Considérez le code suivant qui tente de capturer une valeur par référence et appelle un non-const méthode :

struct foo
{
bool Operator () ( const bool & a )
{

return a;
Copier après la connexion

}
};

int main()
{
foo afoo;

auto bar = [=] () -> bool

{
  afoo(true);
};
Copier après la connexion

return 0;
}

Dans ce code, créer foo::operator() const résout le problème de compilation. Cependant, l'utilisation de mutable directement dans l'expression lambda offre une plus grande flexibilité et permet un accès non constant à la valeur capturée sans modifier la déclaration d'origine

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