このページでは

C++20の概要

Qt 6 では公式には C++17 が必須となっていますが、Qt の高速化と安全性の向上、そしてユーザー体験の向上を図るため、新しい C++ 言語機能のサポートに継続的に取り組んでいます。

このページでは、Qt で利用可能な C++20 の機能について簡単に概要を説明します。

WebEngine およびモジュール固有の要件

Qt 6 は一般的に C++17 互換のコンパイラのみを必要としますが、 Qt WebEngine モジュールは、その依存関係(Chromiumなど)のため、C++20互換のコンパイラを必要とします。

Qt WebEngine をビルドする場合は、お使いのコンパイラがC++20を完全にサポートしていることを確認してください。

詳細な要件については、『Qt WebEngine プラットフォームに関する注意事項』を参照してください。

サポート対象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 また、timezone_tzdb 機能を有効にしてビルドした場合、プラットフォーム固有のバックエンドの代わりにC++20のtzdb機能を使用してタイムゾーン情報にアクセスすることも可能です。一部の標準ライブラリの実装では、IANAのタイムゾーンデータが正確に反映されていないため、Qt 6.9ではこれは実験的な機能のままです。

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 では、operator<=>() (三項比較演算子とも呼ばれる)が導入され、比較の結果を表す 3 種類の順序型が定義されました:

Qt 6.8では、多くのQtCore クラスがoperator<=>() に対応しました。この新しい演算子を使用するには、ユーザープロジェクトをC++20モードでコンパイルする必要があります。

ただし、Qt 6.7以降では、C++17ユーザーも、stdの順序付け型に相当する独自の型を使用できます。

C++20の言語機能であるため、operator<=>() をC++17にバックポートすることはできませんが、Qt::compareThreeWay()関数を使用することができます。この関数は、組み込みC++型(整数型、浮動小数点型、列挙型など)に対して、operator<=>() のC++17版のように動作します。

また、Qt XML では `QtCore` 内のさまざまなクラスに対して、ヘルパー関数 `compareThreeWay() ` を定義しています。これらはすべて隠しフレンドとして実装されています。ユーザーは、カスタム型に対して独自の `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")]]

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