Maison > développement back-end > C++ > Pourquoi les fonctions Lambda récursives en C provoquent-elles des erreurs de compilation et comment peuvent-elles être résolues ?

Pourquoi les fonctions Lambda récursives en C provoquent-elles des erreurs de compilation et comment peuvent-elles être résolues ?

Barbara Streisand
Libérer: 2024-12-19 18:23:09
original
536 Les gens l'ont consulté

Why Do Recursive Lambda Functions in C   Cause Compilation Errors, and How Can They Be Resolved?

Fonctions Lambda récursives en C : un dilemme de compilation

Lors de la conception d'une fonction lambda récursive, vous pouvez rencontrer une erreur de compilation. Examinons le problème en question et explorons sa solution.

La fonction lambda fournie, somme, accumule les résultats d'une opération mathématique, terme, sur une plage de valeurs. Pour le rendre récursif, vous avez tenté de capturer la somme lambda par référence : [term, next, &sum](int a, int b).

Cependant, cette approche conduit à une erreur de compilation. Cela résulte d'une différence fondamentale entre les fonctions lambda déclarées avec auto et celles avec des types entièrement spécifiés.

Les fonctions lambda déduites avec auto dérivent leur type de leur initialisation. Cependant, lors de la création d'un lambda récursif, le lambda n'a pas encore son propre type. Cela crée un conflit : la fermeture du lambda a besoin de connaître son type mais ne l'a pas encore déterminé.

Pour résoudre ce problème, définissez explicitement le type du lambda avec std::function

Le code modifié :

std::function sum;

sum = [term, next, &sum](int a, int b) -> int {
    if (a > b)
        return 0;
    else
        return term(a) + sum(next(a), b);
};

Cette modification fournit au compilateur les informations de type nécessaires , permettant à la fonction lambda récursive de se compiler et de s'exécuter comme prévu.

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