Auf dieser Seite

C++20-Übersicht

Qt 6 erfordert offiziell C++17, wir arbeiten jedoch kontinuierlich daran, neue C++-Sprachfunktionen zu unterstützen, um Qt schneller und sicherer zu machen und unseren Nutzern ein besseres Erlebnis zu bieten.

Diese Seite bietet einen kurzen Überblick über die in Qt verfügbaren C++20-Funktionen.

WebEngine und modulspezifische Anforderungen

Während Qt 6 im Allgemeinen nur einen C++17-kompatiblen Compiler erfordert, benötigt das Qt WebEngine erfordert das Modul aufgrund seiner Abhängigkeiten (wie z. B. Chromium) einen C++20-kompatiblen Compiler.

Wenn Sie „ Qt WebEngine “ erstellen, stellen Sie sicher, dass Ihr Compiler C++20 vollständig unterstützt.

Detaillierte Anforderungen finden Sie in den Plattformhinweisen zu „Qt WebEngine “.

Unterstützung für std::chrono

Verschiedene Klassen im Zusammenhang mit Datum und Uhrzeit bieten Unterstützung für std::chrono-Funktionen aus älteren C++-Versionen. Mit der Einführung von C++20 hat „ std::chrono “ neue Kalendertypen wie „year_month_day“ sowie Datums- und Zeitdarstellungen wie „system_clock“ und dessen „time_point“-Typen hinzugefügt. Außerdem bietet es nun Zugriff auf die IANA-Datenbank mit Informationen zu Zeitzonen. Wenn Qt mit C++20 kompiliert wird, kann es diese Ergänzungen nun nutzen.

QDate QDateTime unterstützt nun die Konvertierung zwischen den verschiedenen Kalender-, Datums- und Datums-Zeit-Typen sowie die Hinzufügung von Dauer-Typen. „ “ unterstützt nun die Konstruktion aus einer QTimeZone „time_zone“.

QTimeZone kann zudem, wenn es mit aktivierter Funktion „ timezone_tzdb “ kompiliert wird, anstelle plattformspezifischer Backends die C++20-tzdb-Funktionen nutzen, um auf Zeitzoneninformationen zuzugreifen. Dies ist in Qt 6.9 noch experimentell, da einige Implementierungen der Standardbibliothek die IANA-Daten für Zeitzonen nicht originalgetreu wiedergeben.

QSpan – eine Qt-Version von std::span

Die Klassenvorlage `std::span ` ist eine Ergänzung der Standardbibliothek, die eine einheitliche Möglichkeit bietet, auf einen zusammenhängenden Teil eines beliebigen zusammenhängenden Containers zuzugreifen.

Die Verwendung von „ std::span “ in den öffentlichen APIs von Qt könnte erhebliche Vorteile bieten. Qt 6 erfordert jedoch nur C++17, was bedeutet, dass es keine C++20-Typen in der API und der ABI enthalten kann.

Qt 6.7 führte ` QSpan ` ein – eine Qt-Version von ` std::span`. Die API der Klasse ist mit der std-Version kompatibel. ` QSpan ` und ` std::span ` können implizit ineinander konvertiert werden. Es gibt jedoch einige Unterschiede zwischen den Klassen. Weitere Details finden Sie im entsprechenden Abschnitt im „ QSpan class documentation “.

Drei-Wege-Vergleichsoperator

C++20 führte „ operator<=>() “ ein, auch bekannt als Drei-Wege-Vergleichsoperator, sowie drei Ordnungsarten zur Darstellung der Vergleichsergebnisse:

In Qt 6.8 wurden viele der „ QtCore “-Klassen um die Unterstützung für „ operator<=>() “ erweitert. Um den neuen Operator nutzen zu können, muss das Benutzerprojekt im C++20-Modus kompiliert werden.

Ab Qt 6.7 können C++17-Anwender jedoch unsere eigenen Entsprechungen zu den std-Ordnungsarten verwenden.

Da es sich bei „ operator<=>() “ um ein C++20-Sprachfeature handelt, ist ein Backport auf C++17 nicht möglich. Sie können jedoch die Funktion „ Qt::compareThreeWay()“ verwenden, die wie eine C++17-Version von „ operator<=>() “ für integrierte C++-Typen (wie Ganzzahlen, Gleitkommazahlen und Aufzählungstypen) funktioniert.

Qt definiert außerdem Hilfsfunktionen ` compareThreeWay() ` für verschiedene Klassen in ` QtCore`. Diese sind alle als „hidden friends“ implementiert. Benutzer können eigene ` compareThreeWay() `-Funktionen für benutzerdefinierte Typen implementieren.

Schließlich stellt Qt eine Funktionsvorlage „ qCompareThreeWay()“ bereit, die als generische Implementierung für den Drei-Wege-Vergleich dient. Sie stützt sich in ihrer Implementierung auf „ Qt::compareThreeWay()“ und die oben genannten freien „ compareThreeWay() “-Funktionen.

Weitere wichtige Funktionen

Qt hat außerdem einige weitere Funktionen aus C++20 übernommen, darunter:

  • Q_CONSTINIT ein Makro, das sich zum C++20-Schlüsselwort ` constinit ` oder zu compilerspezifischen Attributen erweitert, sofern diese verfügbar sind
  • Q_NODISCARD_CTOR Makro, das sich zum Attribut „ [[nodiscard]] “ erweitert, sofern der Compiler „ [[nodiscard]] “ für Konstruktoren unterstützt
  • Q_NODISCARD_X sowie „ Q_NODISCARD_CTOR_X “-Makros für [[nodiscard("reason")]]

© 2026 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.