Maison >développement back-end >C++ >Pourquoi ne puis-je pas comparer les objets `std::function` pour l'égalité ?

Pourquoi ne puis-je pas comparer les objets `std::function` pour l'égalité ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-30 15:55:03913parcourir

Why Can't I Compare `std::function` Objects for Equality?

L'énigme derrière la comparabilité de non-égalité de std::function

std::function encapsule des objets appelables arbitraires, présentant un défi unique pour la comparaison d'égalité. La mise en œuvre de telles comparaisons nécessiterait une comparabilité égale pour tous les types appelables, ce qui imposerait une charge importante aux responsables de la mise en œuvre. De plus, des fonctionnalités égales pourraient donner lieu à des comparaisons non égales basées sur des ordres de liaison d’arguments différents. Par conséquent, la tâche impossible de garantir l'équivalence dans tous les cas interdit la comparabilité des égalités.

Le « trou possible dans le système de types » mentionné dans le projet C 11 fait probablement référence à l'ambiguïté inhérente aux conversions implicites. La suppression des opérateurs d'égalité et l'imposition d'une utilisation explicite garantissent l'absence de code valide généré à partir de leur invocation.

Contrairement à std::function, std::shared_ptr possède une sémantique d'égalité clairement définie. Deux pointeurs sont égaux précisément lorsqu’ils sont tous deux vides ou qu’ils font tous deux référence au même objet. Ce comportement bien défini permet des comparaisons d'égalité simples et significatives.

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