このページでは

C++20 の概要

Qt 6 は公式には C++17 を要求していますが、Qt をより高速に、より安全にし、より良い体験をユーザーに提供するために、私たちは常に新しい C++ 言語機能のサポートに取り組んでいます。

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

WebEngine とモジュール固有の要件

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

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

詳細な要件についてはQt WebEngine Platform Notes を参照してください。

のサポートstd::chrono

日付と時刻に関連するさまざまなクラスは、古いバージョンの C++ からstd::chrono機能をサポートしています。C++20の登場により、std::chronoyear_month_dayなどの新しいカレンダー型が追加され、system_clockやそのtime_point型などの日付と時刻の表現も追加されました。また、タイムゾーン関連情報の IANA データベースへのアクセスも提供されるようになりました。Qt を C++20 でビルドする場合、これらの追加機能を利用できるようになりました。

QDate QDateTime QTimeZone は、time_zone からの構築をサポートするようになりました。

QTimeZone また、timezone_tzdb 機能を有効にしてビルドすると、プラットフォーム固有のバックエンドの代わりに C++20 の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 バージョンと互換性があります。QSpanstd::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() 関数テンプレートを提供しており、これは一般的な三 者比較の実装として機能します。この関数は、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.