Drei-Wege-Vergleichsoperator in C++20
Verwenden Sie den Spaceship-Operator für knappe und konsistente Vergleiche.
Drei-Wege-Vergleichsoperator in C++20 ist eine kostenlose C++ Academy-Lektion auf CoddyKit. Dies ist Lektion 4 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des C++ Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der C++ Academy-Kurs umfasst insgesamt 4 Lektionen.
Der Spaceship-Operator <=>
C++20 führte den Drei-Wege-Vergleichsoperator <=> ein. Ein Operator liefert dem Compiler alles, was er benötigt, um alle sechs relationalen Operatoren zu erzeugen.
Rückgabetypen: drei Kategorien
Der Rückgabetyp hängt von der Stärke der Ordnung ab:
std::strong_ordering— unterscheidbare gleichwertige Wertestd::weak_ordering— gleichwertig, aber unterscheidbar, etwa bei Groß-/Kleinschreibungstd::partial_ordering— einige Werte sind nicht vergleichbar, etwa NaN
Standardvergleich
Das häufigste Muster: Lassen Sie den Compiler <=> erzeugen, indem er die Member lexikografisch vergleicht.
struct Point {
int x;
int y;
auto operator<=>(const Point& other) const = default;
};
Point a{1, 2}, b{1, 3};
bool less = (a < b); // true — auto-generatedAlle sechs automatisch
Wenn Sie <=> per Default erzeugen lassen, wird auch == standardmäßig erzeugt. Zusammen ergeben sie !=, <, <=, > und >= — alle sechs in einer Zeile.
Benutzerdefinierte <=>-Implementierung
Schreiben Sie den Rumpf manuell, wenn Sie eine benutzerdefinierte Vergleichslogik benötigen.
std::strong_ordering operator<=>(const Person& other) const {
if (auto c = name <=> other.name; c != 0) return c;
return age <=> other.age;
}Das Ergebnis verwenden
Das Ergebnis von <=> kann mit dem Literal 0 verglichen werden, um genau die gewünschte boolesche Prüfung durchzuführen.
if ((a <=> b) < 0) std::cout << "a less\n";
if ((a <=> b) == 0) std::cout << "equal\n";
if ((a <=> b) > 0) std::cout << "a greater\n";Gleitkommazahlen und partial_ordering
Verwenden Sie für Gleitkommazahlen std::partial_ordering, um NaN zu behandeln — ein Vergleich mit NaN ergibt unordered.
struct Measurement {
double value;
std::partial_ordering operator<=>(const Measurement&) const = default;
};Beispiel für eine schwache Ordnung
Verwenden Sie eine schwache Ordnung, wenn Werte unterscheidbar sein können, aber als gleich gelten — etwa bei Zeichenketten ohne Beachtung der Groß-/Kleinschreibung.
Benutzerdefiniertes == unabhängig definieren
Sie können <=> per Default erzeugen lassen und ein benutzerdefiniertes == schreiben — manchmal gelten für Gleichheit andere Regeln als für die Ordnung.
Alten Code migrieren
Wenn Ihre Klasse bisher zahlreiche Vergleichsoperatoren besaß, ersetzen Sie sie bei der Migration zu C++20 durch einen standardmäßig erzeugten <=>-Operator. Das bedeutet deutlich weniger Code bei gleicher Semantik.
Wann Sie <=> nicht verwenden sollten
Bei Typen, für die nur Gleichheit relevant ist, nicht aber eine Ordnung, stellen Sie nur operator== und operator!= bereit. Letzterer wird in C++20 automatisch erzeugt.
Leistungshinweis
Der Compiler kann einen standardmäßig erzeugten <=>-Operator genauso effizient optimieren wie von Hand geschriebene Vergleiche. Die Verwendung des Spaceship-Operators verursacht keinen Laufzeit-Overhead.
Kurzer Test
Welche Rückgabekategorie sollte ein Vergleich für Gleitkommatypen verwenden, die NaN enthalten können?
Zusammenfassung
Der C++20-Operator <=> erzeugt alle sechs relationalen Operatoren aus einer einzigen Definition. Lassen Sie ihn standardmäßig erzeugen, damit die Member lexikografisch verglichen werden. Wählen Sie abhängig von der Semantik Ihres Typs eine starke, schwache oder partielle Ordnung.
Lerne C++ mit einem KI-Tutor — kostenlos
Schreibe und führe echten Code in deinem Browser aus, bekomme sofortige Hilfe von einem 24/7 KI-Tutor und setze dein Lernen im Web oder in der App fort.
- Kurse
- 51
- Lektionen
- 203
Häufig gestellte Fragen
Ist die Lektion „Drei-Wege-Vergleichsoperator in C++20“ kostenlos?
Ja — der vollständige Text von „Drei-Wege-Vergleichsoperator in C++20“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des C++ Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der C++ Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Drei-Wege-Vergleichsoperator in C++20“?
Verwenden Sie den Spaceship-Operator für knappe und konsistente Vergleiche. Du übst C++ Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um C++ Academy zu starten?
Keine Vorkenntnisse erforderlich. C++ Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 4 von 4.
Wie lange dauert die Lektion „Drei-Wege-Vergleichsoperator in C++20“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser C++ Academy-Lektion Code schreiben und ausführen?
Ja. Jede C++ Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Arithmetische und Vergleichsoperatoren
- Stream-Einfüge- und Extraktionsoperatoren
- Index- und Funktionsaufrufoperatoren
- Drei-Wege-Vergleichsoperator in C++20