Heim > Backend-Entwicklung > C++ > Warum generiert der nicht standardmäßige Raumschiff-Operator in C 20 nicht „==' und „!='?

Warum generiert der nicht standardmäßige Raumschiff-Operator in C 20 nicht „==' und „!='?

Linda Hamilton
Freigeben: 2024-11-07 22:13:03
Original
296 Leute haben es durchsucht

Why Doesn't the Non-defaulted Spaceship Operator Generate `==` and `!=` in C  20?

Warum der nicht standardmäßige Raumschiff-Operator nicht == und != generiert

Bei Verwendung des neuen Raumschiff-Operators (<=>) in C 20, Es ist wichtig, die Auswirkungen der Implementierung eines benutzerdefinierten Operators im Vergleich zur Verwendung der Standardimplementierung zu beachten.

Im ersten Beispiel verwenden Sie den Standardoperator<=> Implementierung, die von der Sprache bereitgestellt wird. Diese Standardimplementierung ermöglicht es dem Compiler, automatisch einen ==-Operator zu generieren. Wenn Sie jedoch einen benutzerdefinierten Operator implementieren<=> Funktion kann der Compiler nicht mehr implizit einen entsprechenden ==-Operator generieren.

Dieses Verhalten ist beabsichtigt, wie im C-Standard angegeben ([class.compare.default](https://en.cppreference.com /w/cpp/sprache/comparison#Class_comparison)):

If the class definition does not explicitly declare an == operator function, but declares a defaulted three-way comparison operator function, an == operator function is declared implicitly with the same access as the three-way comparison operator function.
Nach dem Login kopieren

Der Grund für diese Designwahl besteht darin, die implizite Generierung von == in Situationen zu verhindern, in denen dies möglicherweise nicht die effizienteste Methode zur Bestimmung ist Gleichwertigkeit. Beispielsweise sollten Klassen wie std::vector kein nicht standardmäßiges <=> verwenden. für Gleichheitstests, da es effizienter ist, zuerst die Größen zu vergleichen.

In einem benutzerdefinierten <=> Implementierung führt die Klasse möglicherweise spezielle Operationen aus, die auch eine benutzerdefinierte Implementierung für == erfordern. Anstatt also eine potenziell nicht optimale Standardimplementierung zu generieren, überlässt es die Sprache dem Programmierer, den ==-Operator explizit zu definieren.

Das obige ist der detaillierte Inhalt vonWarum generiert der nicht standardmäßige Raumschiff-Operator in C 20 nicht „==' und „!='?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage