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!