C++20 Überblick
Qt 6 setzt offiziell C++17 voraus. Wir arbeiten jedoch ständig an der Unterstützung neuer C++-Sprachfunktionen, um Qt schneller und sicherer zu machen und unseren Benutzern ein besseres Erlebnis zu bieten.
Diese Seite gibt einen kurzen Überblick über die in Qt verfügbaren C++20-Funktionen.
Unterstützung für std::chrono
Verschiedene Klassen, die mit Datum und Zeit zu tun haben, unterstützen std::chrono-Funktionen aus älteren Versionen von C++. Mit der Ankunft von C++20 hat std::chrono
neue Kalendertypen, wie year_month_day, sowie Datums- und Zeitdarstellungen, wie system_clock und seine time_point Typen, hinzugefügt. Außerdem bietet es jetzt Zugriff auf die IANA-Datenbank mit zeitzonenbezogenen Informationen. Wenn Qt mit C++20 gebaut wird, kann es nun diese Ergänzungen nutzen.
QDate und QDateTime unterstützen nun die Konvertierung in und aus den verschiedenen Kalender-, Datums- und Datum-Zeit-Typen, zusammen mit dem Hinzufügen von Dauer-Typen. QTimeZone unterstützt nun die Konstruktion aus einer time_zone.
QTimeZone kann auch, wenn es mit dem Feature timezone_tzdb
erstellt wurde, die C++20 tzdb-Funktionen anstelle von plattformspezifischen Backends verwenden, um auf Zeitzoneninformationen zuzugreifen. Dies bleibt in Qt 6.9 experimentell, da einige Standardbibliotheksimplementierungen die IANA-Daten für Zeitzonen nicht getreu darstellen.
QSpan - eine Qt-Version von std::span
Die std::span-Klassenvorlage ist eine Ergänzung der Standardbibliothek, die einen einheitlichen Weg zum Zugriff auf einen zusammenhängenden Teil eines beliebigen zusammenhängenden Containers bietet.
Die Verwendung von std::span
in den öffentlichen APIs von Qt könnte erhebliche Vorteile bringen. Allerdings erfordert Qt 6 nur C++17, was bedeutet, dass es keine C++20-Typen in der API und ABI haben kann.
Mit Qt 6.7 wurde QSpan eingeführt - eine Qt-Version von std::span
. Die API der Klasse ist kompatibel mit der Standardversion. QSpan und std::span
können implizit ineinander umgewandelt werden. Allerdings gibt es einige Unterschiede zwischen den Klassen. Siehe den entsprechenden Abschnitt in QSpan class documentation für weitere Details.
Dreifach-Vergleichsoperator
Mit C++20 wurden operator<=>()
, auch bekannt als Dreiweg-Vergleichsoperator, und drei Ordnungstypen eingeführt, um die Ergebnisse des Vergleichs darzustellen:
In Qt 6.8 haben viele der QtCore Klassen Unterstützung für operator<=>()
erhalten. Um den neuen Operator zu verwenden, muss das Benutzerprojekt im C++20-Modus kompiliert werden.
Ab Qt 6.7 können C++17-Benutzer jedoch unsere eigenen Äquivalente der std-Bestellungstypen verwenden.
Da es sich um ein C++20-Sprachmerkmal handelt, ist eine Rückportierung von operator<=>()
nach C++17 nicht möglich, aber Sie können die Funktion Qt::compareThreeWay() verwenden, die wie eine C++17-Version von operator<=>()
für eingebaute C++-Typen (wie Ganzzahlen, Gleitkomma- und Aufzählungstypen) funktioniert.
Qt definiert auch Hilfsfunktionen compareThreeWay()
für verschiedene Klassen in QtCore. Diese sind alle als versteckte Freunde implementiert. Benutzer können ihre eigenen compareThreeWay()
Funktionen für eigene Typen implementieren.
Schließlich bietet Qt eine qCompareThreeWay()-Funktionsvorlage, die als generische Implementierung eines Drei-Wege-Vergleichs dient. Sie stützt sich bei ihrer Implementierung auf Qt::compareThreeWay() und die oben erwähnten freien compareThreeWay()
Funktionen.
Zusätzliche wichtige Funktionen
Qt hat auch einige weitere Funktionen von C++20 übernommen, wie z.B.:
- Q_CONSTINIT Makro, das zum C++20-Schlüsselwort
constinit
expandiert, oder zu compilerspezifischen Attributen, falls diese verfügbar sind - Q_NODISCARD_CTOR Makro, das zum
[[nodiscard]]
-Attribut expandiert, wenn der Compiler[[nodiscard]]
auf Konstruktoren unterstützt - Q_NODISCARD_X und Q_NODISCARD_CTOR_X Makros für
[[nodiscard("reason")]]
© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.