Maison > développement back-end > C++ > Quand devriez-vous préférer `std::bind` à Lambdas en C 14 ?

Quand devriez-vous préférer `std::bind` à Lambdas en C 14 ?

Barbara Streisand
Libérer: 2024-12-23 09:09:34
original
419 Les gens l'ont consulté

When Should You Prefer `std::bind` Over Lambdas in C  14?

Pourquoi envisager std::bind sur Lambdas en C 14 ?

C 14 a introduit de puissantes expressions lambda, incitant certains à remettre en question la pertinence continue de std::bind. Bien que les lambdas offrent une syntaxe concise, std::bind conserve son utilité dans certains scénarios.

Variables capturées inamovibles :
En C 11, les lambdas ne peuvent capturer que les variables lvalue, tandis que bind permet de déplacer des variables. Grâce à bind, vous pouvez écrire le code suivant :

auto f1 = std::bind(f, 42, _1, std::move(v));
Copier après la connexion

Capturer l'expression :
lambda ne peut pas capturer les expressions directement. Au lieu de cela, bind permet d'écrire comme ceci :

auto f1 = std::bind(f, 42, _1, a + b);
Copier après la connexion

Paramètres de surcharge de l'objet fonction :
En C 14, les lambdas peuvent résoudre ce problème via l'inférence de type, et bind ici Encore une explosion dans la scène.

Impossible de transmettre les paramètres :
Idéalement, la liaison qui doit utiliser le transfert parfait peut être écrite comme le code suivant :

auto f1 = [=](auto&amp;&amp; arg) { f(42, std::forward<decltype(arg)>(arg)); };
Copier après la connexion

Cependant Au lieu de cela, bind le bloque sous la forme suivante :

auto f1 = std::bind(std::declval<decltype(f)>(), 42, _1);
auto f2 = std::bind(f, 42, std::declval<decltype(arg)>(), std::placeholders::_2);
Copier après la connexion

Inconvénients de bind :

  • Les noms de liaison peuvent conduire à une ambiguïté dans les fonctions surchargées.
  • Les fonctions sont plus susceptibles d'être intégrées lors de l'utilisation de bind que de lambda.

Malgré cela, bind a toujours ses avantages. Il produit uniquement un type d'objet fonction, alors que lambda peut produire un type unique pour chaque fonction. En fin de compte, le choix de bind ou lambda dépend de cas d'utilisation et de compromis spécifiques.

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