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.
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!