Sur cette page

Présentation de C++20

Qt 6 nécessite officiellement C++17, mais nous travaillons sans relâche à la prise en charge des 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 présente un bref aperçu des fonctionnalités de C++20 disponibles dans Qt.

Exigences spécifiques à WebEngine et aux modules

Bien que Qt 6 ne nécessite en général qu’un compilateur compatible C++17, le Qt WebEngine module nécessite un compilateur compatible C++20 en raison de ses dépendances (telles que Chromium).

Si vous compilez Qt WebEngine, assurez-vous que votre compilateur prend entièrement en charge C++20.

Consultez les notes sur la plate-formeQt WebEngine pour connaître les exigences détaillées.

Prise en charge de std::chrono

Diverses classes liées à la date et à l’heure prennent en charge les fonctionnalités 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 date et d’heure, telles que system_clock et ses types time_point. Il offre désormais également un accès à la base de données IANA contenant des informations relatives aux fuseaux horaires. Lorsque Qt est compilé avec C++20, il peut désormais tirer parti de ces ajouts.

QDate De plus, ` QDateTime ` prend désormais en charge la conversion vers et depuis les différents types de calendrier, de date et de date-heure, ainsi que l’ajout de types de durée. ` QTimeZone ` prend désormais en charge la construction à partir d’un `time_zone`.

QTimeZone Peut également, lorsqu’il est compilé avec la fonctionnalité « timezone_tzdb » activée, utiliser les fonctionnalités tzdb de C++20 à la place des backends spécifiques à la plateforme pour accéder aux informations de fuseau horaire. Cette fonctionnalité reste expérimentale dans Qt 6.9, car certaines implémentations de la bibliothèque standard ne reprennent pas fidèlement les données de l’IANA concernant 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 d’ std::span dans les API publiques de Qt pourrait offrir des avantages significatifs. Cependant, Qt 6 ne nécessite que C++17, ce qui signifie qu’il ne peut pas inclure 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 convertis implicitement l’un en l’autre. Il existe toutefois certaines différences entre les classes. Pour plus de détails, consultez la section correspondante dans la documentation de la bibliothèque standard ( QSpan class documentation ).

Opérateur de comparaison à trois voies

C++20 a introduit ` operator<=>()`, également appelé « opérateur de comparaison à trois voies », ainsi que trois types d’ordonnancement pour représenter les résultats de la comparaison :

Dans Qt 6.8, de nombreuses classes de type « QtCore » prennent désormais en charge l’ operator<=>(). Pour utiliser ce nouvel opérateur, le projet de l’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.

operator<=>() étant une fonctionnalité du langage C++20, il n'est pas possible de la rétroporter vers C++17, 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. Celles-ci 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 voies. Son implémentation s'appuie sur ` Qt::compareThreeWay()` et sur les fonctions ` compareThreeWay() ` libres mentionnées ci-dessus.

Autres fonctionnalités importantes

Qt a également adopté quelques autres fonctionnalités de C++20, telles que :

  • Q_CONSTINIT une macro qui se développe en mot-clé C++20 « constinit », ou en attributs spécifiques au compilateur s’ils sont disponibles
  • Q_NODISCARD_CTOR une macro qui se développe en l’attribut « [[nodiscard]] » si le compilateur prend en charge l’ [[nodiscard]] des constructeurs
  • Q_NODISCARD_X et des 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.