Vue d'ensemble du C++20
Qt 6 requiert officiellement le C++17, mais nous travaillons constamment à la prise en charge de nouvelles fonctionnalités du langage C++ afin de rendre Qt plus rapide et plus sûr, et d'offrir une meilleure expérience à nos utilisateurs.
Cette page donne un bref aperçu des fonctionnalités C++20 disponibles dans Qt.
Exigences spécifiques au WebEngine et aux modules
Alors que Qt 6 ne nécessite qu'un compilateur compatible C++17 en général, le module Qt WebEngine nécessite un compilateur compatible C++20 en raison de ses dépendances (comme Chromium).
Si vous construisez Qt WebEngine, assurez-vous que votre compilateur supporte pleinement le C++20.
Voir Qt WebEngine Platform Notes pour les exigences détaillées.
Prise en charge de std::chrono
Diverses classes relatives à la date et à l'heure prennent en charge les fonctionnalités de std::chrono des anciennes versions de C++. Avec l'arrivée de C++20, std::chrono a ajouté de nouveaux types de calendrier, tels que year_month_day, ainsi que des représentations de la date et de l'heure, telles que system_clock et ses types time_point. Il permet également d'accéder à la base de données de l'IANA sur les informations relatives au fuseau horaire. Lorsque Qt est construit avec C++20, il peut maintenant utiliser ces ajouts.
QDate et QDateTime supportent maintenant la conversion vers et depuis les différents types de calendrier, date et date-heure, ainsi que l'ajout des types de durée. QTimeZone supporte maintenant la construction à partir d'un time_zone.
QTimeZone peut également, lorsqu'il est construit avec la fonctionnalité timezone_tzdb activée, utiliser les installations tzdb de C++20 à la place des backends spécifiques à la plate-forme pour accéder aux informations sur les fuseaux horaires. Ceci reste expérimental dans Qt 6.9 car certaines implémentations de la bibliothèque standard ne représentent pas fidèlement les données IANA pour les fuseaux horaires.
QSpan - une version Qt de std::span
Le modèle de classe std::span est un ajout à la bibliothèque standard qui fournit un moyen uniforme d'accéder à une partie contiguë de n'importe quel conteneur contigu.
L'utilisation de std::span dans les API publiques de Qt pourrait apporter des avantages significatifs. Cependant, Qt 6 ne requiert que C++17, ce qui signifie qu'il ne peut pas avoir de types C++20 dans l'API et l'ABI.
Qt 6.7 a introduit QSpan - une version Qt de std::span. L'API de la classe est compatible avec la version std. QSpan et std::span peuvent être implicitement convertis l'un en l'autre. Cependant, il existe quelques différences entre les classes. Voir la section correspondante dans QSpan class documentation pour plus de détails.
Opérateur de comparaison à trois
Le C++20 a introduit operator<=>(), également connu sous le nom d'opérateur de comparaison à trois voies, et trois types d'ordre pour représenter les résultats de la comparaison :
Dans Qt 6.8, de nombreuses classes QtCore ont obtenu la prise en charge de operator<=>(). Pour utiliser le nouvel opérateur, le projet utilisateur doit être compilé en mode C++20.
Cependant, à partir de Qt 6.7, les utilisateurs de C++17 peuvent utiliser nos propres équivalents des types d'ordonnancement std.
Comme il s'agit d'une fonctionnalité du langage C++20, le portage de operator<=>() vers C++17 n'est pas possible, mais vous pouvez utiliser la fonction Qt::compareThreeWay(), qui agit comme une version C++17 de operator<=>() pour les types C++ intégrés (tels que les entiers, les nombres à virgule flottante et les types d'énumération).
Qt définit également des fonctions d'aide compareThreeWay() pour diverses classes dans QtCore. Elles sont toutes implémentées en tant qu'amis cachés. Les utilisateurs peuvent implémenter leurs propres fonctions compareThreeWay() pour des types personnalisés.
Enfin, Qt fournit un modèle de fonction qCompareThreeWay(), qui sert d'implémentation générique de la comparaison à trois. Il s'appuie sur Qt::compareThreeWay() et les fonctions gratuites compareThreeWay() mentionnées ci-dessus dans son implémentation.
Autres caractéristiques importantes
Qt a également adopté quelques autres caractéristiques de C++20, telles que :
- Q_CONSTINIT une macro qui se développe vers le mot-clé
constinitdu C++20, ou vers des attributs spécifiques au compilateur s'ils sont disponibles - Q_NODISCARD_CTOR macro qui se développe vers l'attribut
[[nodiscard]]si le compilateur supporte[[nodiscard]]sur les constructeurs - Q_NODISCARD_X et les macros Q_NODISCARD_CTOR_X pour les
[[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.