Heim >Backend-Entwicklung >C++ >Warum ist std::function nicht gleichheitsvergleichbar?

Warum ist std::function nicht gleichheitsvergleichbar?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-01 13:13:02685Durchsuche

Why is std::function Not Equality Comparable?

Warum ist std::function nicht gleichheitsvergleichbar?

Trotz seiner weit verbreiteten Verwendung ist std::function nicht gleichheitsvergleichbar. Diese Einschränkung, die auch auf boost::function und std::tr1::function anwendbar ist, hat ihre Wurzeln in Überlegungen zum Sprachdesign.

Ursprünglich gelöschte Operatoren

In einer Im frühen C 11-Entwurf wurden die Gleichheitsoperatoren für std::function als gelöscht deklariert, mit dem Kommentar „Gelöschte Überladungen schließen mögliche Lücke im Typsystem.“ Diese vage Aussage lässt uns über die Natur dieses „Lochs“ rätseln.

Die „Lücke“ der booleschen Konvertierung

Gemäß der TR1-Spezifikation die nicht deklarierte Gleichheit Operatoren für std::function zielen darauf ab, eine Lücke zu schließen, die durch boolesche Konvertierungen entsteht. Diese Konvertierungen ermöglichen den Vergleich von Funktionsinstanzen über == und !=.

Die std::shared_ptr-Ausnahme

Im Gegensatz zu std::function hat std::shared_ptr die Ausnahme wohldefinierte Gleichheitssemantik. Zwei Zeiger gelten als gleich, wenn sie beide leer oder beide nicht leer sind und auf dasselbe Objekt zeigen. Dies liegt daran, dass die Rolle von std::shared_ptr einfacher ist und seine Gleichheitssemantik leicht definiert werden kann.

Komplexität und Äquivalenz

Die Implementierung eines Gleichheitsvergleichs für std::function würde erfordern, dass alle aufrufbaren Typen gleichheitsvergleichbar sind, was nicht immer möglich ist. Darüber hinaus kann das Testen der Äquivalenz für Funktionen eine Herausforderung sein, insbesondere wenn sie unterschiedliche Argumentbindungen haben.

Fazit

Während std::function eine bequeme Möglichkeit bietet, mit verschiedenen zu arbeiten Bei aufrufbaren Typen ist der Mangel an Gleichheitsvergleichbarkeit eine bewusste Designentscheidung. Die Vermeidung potenzieller Schlupflöcher und die Berücksichtigung der Vielfalt aufrufbarer Typen waren die Hauptüberlegungen bei dieser Entscheidung.

Das obige ist der detaillierte Inhalt vonWarum ist std::function nicht gleichheitsvergleichbar?. 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