C++20 の概要
Qt 6 は公式には C++17 を要求していますが、Qt をより高速で安全にし、ユーザーにより良い体験を提供するために、私たちは常に新しい C++ 言語機能のサポートに取り組んでいます。
このページでは、Qt で利用可能な C++20 機能の概要を説明します。
のサポートstd::chrono
日付と時刻に関連するさまざまなクラスは、古いバージョンの C++ からstd::chrono機能をサポートしています。C++20 の登場に伴い、std::chrono
では、year_month_day などの新しいカレンダー型に加え、system_clockやそのtime_point型などの日付・時刻表現が追加されました。また、タイムゾーン関連情報の IANA データベースへのアクセスも提供されるようになりました。Qt を C++20 でビルドする場合、これらの追加機能を利用できるようになりました。
QDate QDateTime QTimeZone は、time_zone からの構築をサポートするようになりました。
QTimeZone また、 機能を有効にしてビルドすると、プラットフォーム固有のバックエンドの代わりに C++20 のtimezone_tzdb
tzdb機能を使用してタイムゾーン情報にアクセスできるようになります。標準ライブラリの実装の中には、タイムゾーンのIANAデータを忠実に表現していないものがあるためです。
QSpan - Qt 版のstd::span
std::spanクラステンプレートは標準ライブラリに追加されたもので、任意の連続したコンテナの連続した部分にアクセスするための統一された方法を提供します。
QtのパブリックAPIでstd::span
。しかし、Qt 6 は C++17 しか必要としないため、API や ABI に C++20 型を使用することができません。
Qt 6.7 では、std::span
の Qt バージョンであるQSpan が導入されました。このクラスの API は std バージョンと互換性があります。QSpan とstd::span
は暗黙的に相互に変換することができます。しかし、クラス間にはいくつかの違いがあります。詳細はQSpan class documentation の対応するセクションを参照してください。
三元比較演算子
C++20 では、3 者間比較演算子としても知られるoperator<=>()
と、比較結果を表す 3 つの順序付け型が導入されました:
std::strong_ordering; std::weak_ordering; std::partial_ordering Qt 6.8 では、多くのQtCore クラスがoperator<=>()
をサポートしました。新しい演算子を使用するには、ユーザープロジェクトを C++20 モードでコンパイルする必要があります。
しかし、Qt 6.7 以降、C++17 ユーザーは、標準の順序付け型と同等のものを使用することができます。
C++20 の言語機能として、operator<=>()
を C++17 にバックポートすることはできませんが、Qt::compareThreeWay() 関数を使用することができます。この関数は、組み込みの C++ 型(整数、浮動小数点、列挙型など)に対して、operator<=>()
の C++17 バージョンのように動作します。
Qt はまた、QtCore の様々なクラスに対してヘルパー関数compareThreeWay()
を定義しています。これらはすべてhidden friend として実装されています。ユーザはカスタム型のために独自のcompareThreeWay()
関数を実装することができます。
最後に、Qt はqCompareThreeWay() 関数テンプレートを提供しており、一般的な 3 者間比較の実装として機能します。この関数は、Qt::compareThreeWay() と、上記のフリーなcompareThreeWay()
関数に依存して実装されています。
その他の重要な機能
Qt は、C++20 からさらにいくつかの機能を採用しています:
- Q_CONSTINIT C++20 の キーワード、またはコンパイラ固有の属性(利用可能な場合)に展開するマクロ。
constinit
- Q_NODISCARD_CTOR コンパイラがコンストラクタの をサポートしている場合、 属性に展開するマクロ。
[[nodiscard]]
[[nodiscard]]
- Q_NODISCARD_X および のマクロQ_NODISCARD_CTOR_X
[[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.