Maison  >  Article  >  développement back-end  >  Pourquoi std::function n'est-il pas comparable en égalité ?

Pourquoi std::function n'est-il pas comparable en égalité ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-01 13:13:02622parcourir

Why is std::function Not Equality Comparable?

Pourquoi std::function n'est-il pas comparable en égalité ?

Malgré son utilisation répandue, std::function n'est pas comparable en égalité. Cette limitation, également applicable à boost::function et std::tr1::function, trouve ses racines dans des considérations de conception du langage.

Opérateurs initialement supprimés

Dans un au début du projet C 11, les opérateurs d'égalité pour std::function ont été déclarés supprimés, avec le commentaire "les surcharges supprimées ferment un trou possible dans le système de types". Cette vague affirmation nous laisse interroger sur la nature de ce « trou ».

La « faille » de conversion de type booléen

Selon la spécification TR1, l'égalité non déclarée les opérateurs pour std::function visent à combler une faille créée par les conversions de type booléen. Ces conversions permettent de comparer les instances de fonction via == et !=.

L'exception std::shared_ptr

Contrairement à std::function, std::shared_ptr a sémantique d’égalité bien définie. Deux pointeurs sont considérés comme égaux s’ils sont tous deux vides ou non vides et pointant vers le même objet. En effet, le rôle de std::shared_ptr est plus simple et sa sémantique d'égalité peut être facilement définie.

Complexité et équivalence

La mise en œuvre d'une comparaison d'égalité pour std::function serait exigent que tous les types appelables soient comparables en termes d’égalité, ce qui n’est pas toujours réalisable. De plus, tester l'équivalence des fonctions peut s'avérer difficile, en particulier lorsqu'elles ont des liaisons d'arguments différentes.

Conclusion

Bien que std::function fournisse un moyen pratique de travailler avec divers types appelables, son manque de comparabilité en matière d'égalité a été un choix de conception délibéré. Éviter les failles potentielles et tenir compte de la diversité des types appelables étaient les principales considérations derrière cette décision.

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!

Déclaration:
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