Heim > Artikel > Backend-Entwicklung > Verhindert die Verwendung eines benutzerdefinierten Raumschiffoperators die Generierung von Gleichheitsoperatoren in C?
Der Raumschiffoperator und seine Auswirkungen auf Gleichheitsoperatoren
Der in C 20 eingeführte Raumschiffoperator <=> bietet eine kurze Zusammenfassung Syntax für Drei-Wege-Vergleiche. Allerdings könnten Benutzer, die auf unerwartetes Verhalten stoßen, wenn sie sowohl den Raumschiff-Operator als auch die Gleichheitsoperatoren (== und !=) verwenden, überrascht sein.
Standardimplementierung und generierte Gleichheitsoperatoren
Wenn der Raumschiff-Operator als Standardwert deklariert wird (z. B. auto-Operator<=>(const X&) const = default;), kann der Compiler automatisch einen ==-Operator basierend auf dem zugrunde liegenden Vergleich generieren. Dies wird im folgenden Beispiel demonstriert:
struct X { int Dummy = 0; auto operator<=>(const X&) const = default; }; int main() { X a, b; a == b; // OK! }
Benutzerdefinierte Implementierung und nicht generierte Gleichheitsoperatoren
Wenn jedoch eine benutzerdefinierte Implementierung des Raumschiffoperators bereitgestellt wird, Die generierten Gleichheitsoperatoren sind nicht mehr verfügbar. Dies wurde im Frageninhalt beobachtet, wo ein benutzerdefinierter Operator<=> Die Implementierung führte zu einem Fehler bei der Verwendung des Operators ==.
Begründung des Verhaltens
Dieses Verhalten ist beabsichtigt. Der C-Standard legt fest, dass nur ein standardmäßiger Raumschiffoperator die Generierung eines Gleichheitsoperators auslöst ([class.compare.default](https://eel.is/c draft/class.compare.default)). Der Grund dafür ist, dass bestimmte Klassen, wie z. B. std::vector, den Raumschiffoperator möglicherweise nicht für Gleichheitsprüfungen verwenden möchten, da dies möglicherweise nicht der effizienteste Ansatz ist.
Fazit
Daher muss bei der Definition eines benutzerdefinierten Raumschiffoperators beachtet werden, dass dadurch die automatische Generierung von Gleichheitsoperatoren entfällt. Wenn Gleichheitsprüfungen erforderlich sind, wird empfohlen, eine explizite Definition für den ==-Operator bereitzustellen.
Das obige ist der detaillierte Inhalt vonVerhindert die Verwendung eines benutzerdefinierten Raumschiffoperators die Generierung von Gleichheitsoperatoren in C?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!