Heim  >  Artikel  >  Backend-Entwicklung  >  Warum kann ich „std::function'-Objekte nicht auf Gleichheit vergleichen?

Warum kann ich „std::function'-Objekte nicht auf Gleichheit vergleichen?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-10-30 15:55:03908Durchsuche

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

Das Rätsel hinter der Nichtgleichheitsvergleichbarkeit von std::function

std::function kapselt beliebige aufrufbare Objekte und stellt eine einzigartige Herausforderung für den Gleichheitsvergleich dar. Die Implementierung solcher Vergleiche würde eine gleichwertige Vergleichbarkeit für alle aufrufbaren Typen erfordern, was eine erhebliche Belastung für die Implementierer bedeuten würde. Darüber hinaus könnte eine gleiche Funktionalität zu ungleichen Vergleichen führen, die auf unterschiedlichen Argumentbindungsreihenfolgen basieren. Daher verhindert die unmögliche Aufgabe, die Gleichwertigkeit in allen Fällen zu gewährleisten, die Gleichheitsvergleichbarkeit.

Die im C 11-Entwurf erwähnte „mögliche Lücke im Typsystem“ bezieht sich wahrscheinlich auf die inhärente Mehrdeutigkeit impliziter Konvertierungen. Durch das Löschen von Gleichheitsoperatoren und das Erzwingen der expliziten Verwendung wird sichergestellt, dass bei ihrem Aufruf kein gültiger Code generiert wird.

Im Gegensatz zu std::function verfügt std::shared_ptr über eine klar definierte Gleichheitssemantik. Zwei Zeiger sind genau dann gleich, wenn beide leer sind oder sich beide auf dasselbe Objekt beziehen. Dieses klar definierte Verhalten ermöglicht einfache und aussagekräftige Gleichheitsvergleiche.

Das obige ist der detaillierte Inhalt vonWarum kann ich „std::function'-Objekte nicht auf Gleichheit vergleichen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn