Capture de variables dans les fonctions Lambda
Lors de l'utilisation d'expressions lambda dans des appels de fonction, la capture des variables de la portée englobante est essentielle. Dans ce contexte, l'incapacité de capturer implicitement des variables peut conduire à des erreurs de compilation, comme la fameuse « erreur C3493 : 'la variable "ne peut pas être implicitement capturée...""
Considérez l'extrait de code suivant :
<code class="cpp">int flagId = _ChildToRemove->getId(); auto new_end = std::remove_if(m_FinalFlagsVec.begin(), m_FinalFlagsVec.end(), [](Flag& device) { return device.getId() == flagId; }); m_FinalFlagsVec.erase(new_end, m_FinalFlagsVec.end());</code>
Ce code tente de supprimer un élément d'un vecteur en C à l'aide d'une fonction lambda. La lambda compare le champ ID de chaque appareil dans le vecteur m_FinalFlagsVec à une variable externe flagId, l'ID de l'appareil à utiliser. supprimé.
Cependant, le compilateur génère l'erreur susmentionnée, indiquant que la variable flagId n'est pas incluse dans la liste de capture du lambda. Pour résoudre ce problème, nous devons spécifier explicitement les variables à capturer dans la portée englobante.
<code class="cpp">[flagId](Flag& device) { return device.getId() == flagId; }</code>
En incluant flagId dans la liste de capture, nous indiquons que le lambda accédera à la variable flagId depuis la portée englobante :
<.>Par valeur : La variable est copiée dans la fermeture du lambda, la rendant immuable au sein du lambda.
<code class="cpp">[flagId = std::as_const(flagId)](Flag& device) { // flagId is immutable within the lambda }</code>
Par référence : La variable est directement référencé dans le lambda, permettant la modification.
<code class="cpp">[&flagId](Flag& device) { // flagId can be modified within the lambda }</code>
Par référence mutable : Similaire à la capture par référence, mais permet au lambda de modifier le capturé variable.
<code class="cpp">[mutable flagId](Flag& device) { // flagId can be modified within the lambda }</code>
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!