C++20 は、プログラミング言語 C++ の標準規格 ISO/IEC 14882:2020 [1]の通称である[2]。C++17 の次のバージョンである。この規格は、2020年2月にプラハで開催された会議でWG21によって技術的に最終決定[3]され[4]、2020年9月4日に承認され、2020年12月に公開された。
C++20は、C++14やC++17と比べ新たな主要機能が追加されている[5]。以下は、C++20に受け入れられるか、C++20に含めることが検討されている変更の一部のリストである。[6] [要更新]
C++20では多くの新機能が導入された。次のリストは完全ではない可能性がある。
[=, this][11]operator <=>による三方比較for文内における追加変数の初期化[13]typenameの必要性が除去される[19][[no_unique_address]] [20] 、[[likely]]および[[unlikely]] [21]explicit、明示的修飾子がブール式に依存できるようにする[22]constexpr:仮想関数[23]、共用体[24]、try および catch[25]、dynamic_cast および typeid[26]、std::pointer_traits[27]constevalキーワードを使用した即時関数[28]using[34]constinitキーワード[35]std::make_sharedおよびstd::allocate_shared[37]std::atomic<shared_ptr<T>>やstd::atomic<weak_ptr<T>> )[38]std::to_address[39]<chrono>へのカレンダーとタイムゾーンの追加[40]std::span(std::string_viewに類似するが、spanは参照シーケンスを変更可能である) [41]<version>ヘッダー[42]std::bit_cast<>。memcpy()よりも冗長度が低く、コンパイラの内部を利用しやすくなっている[43]。std::map::containsメソッド[47]concept、constinit[35]、consteval、co_await、co_return、co_yield、requires(加えてexportの意味の変更)、およびchar8_tといった多くの新しいキーワード(および新規の「宇宙船演算子」operator <=>)が追加された[50]。また、C++20以降、explicitは式を取ることができるようになった[51]。volatileキーワードのほとんどの用法は廃止予定となった[49]。
キーワードに加えて、importやmoduleなど、特別な意味を持つ識別子が新しく加わった。
C++20で新しく追加された属性:[[likely]]、[[unlikely]]、および[[no_unique_address]][52]。
2017年7月(トロント)にC++20ワーキングドラフトに適用された変更は次のとおりである:[53]
[=, this]std::make_sharedおよびstd::allocate_shared2017年11月の秋の会議(アルバカーキ)でC++20ワーキングドラフトに適用された変更は次のとおりである:[54] [55]
operator <=>を使用した三方比較forステートメント内の追加変数の初期化std::atomic<shared_ptr<T>>やstd::atomic<weak_ptr<T>> )std::to_address2018年3月(ジャクソンビル)のC++20ワーキングドラフトに適用された変更は次のとおりである:[56]
typenameの必要性の除去[57][[no_unique_address]] [58]、[[likely]]および[[unlikely]][59]<chrono>へのカレンダーとタイムゾーンの追加[60]std::span(std::string_viewと類似するが、spanは参照されたシーケンスを変更可能である)[61]<version>ヘッダ[62]2018年6月の夏の会議(Rapperswil)でC++20ワーキングドラフトに適用された変更は次のとおりである:[63]
memcpy()より冗長性が低く、コンパイラの内部を利用する能力が高いオブジェクト表現のビットキャスト[66]explicit[67]2018年11月の秋の会議(サンディエゴ)でC++20ワーキングドラフトに適用された変更は次のとおりである:
constevalキーワードを使用した即時関数[70]2019年2月の冬の会議(コナ)でC++20ワーキングドラフトに適用された変更は次のとおりである:[75] [76]
2019年7月の夏の会議(ケルン)でC++20ワーキングドラフトに適用された変更は次のとおりである:[86] [87] [88]
constinitキーワード-> Type return-type-requirements の削除[97])volatileを非推奨とした[49][[nodiscard]]の効果[98]constexpr INVOKE[105]std::atomic_ref<T>[107]、std::atomic<std::shared_ptr<T>>[108])<=>演算子を標準ライブラリに追加[109]std::source_location[116]std::string[117]、std::vector[118])std::stop_tokenおよびjoinされるスレッド(std::jthread)[119]2019年11月の秋の会議(ベルファスト)でのNBコメントの解決中に適用された変更には以下を含む:[120][121][122]
operator==から分離されたため、ユーザー定義のoperator==許可しないという制限がなくなった[123]。これにより、クラスタイプのNTTPの配列メンバーも許可される。<compare>がフリースタンディング実装で利用可能になった[125]std::spanのtypedefは、標準ライブラリの他の部分と一致するようにsize_typeからindex_typeに変更された[126]std::string_viewに対する範囲コンストラクタ(文字のイテレーターペアからのコンストラクタ)[128]、P1394R4:std::span<ref>に対する範囲コンストラクタ[129]、P1870R1:forwarding-range<T>が微妙すぎる[130])std::atomic<T>の初期化が変更され、デフォルトおよびリスト初期化で動作するようになった[131]。std::latchおよびstd::barrierは、新しいメンバ関数max()を通じて実装がサポートするスレッドの最大数を報告できるようになった。std::weak_equalityとstd::strong_equalityは使用されなくなったため削除された<numeric>内のアルゴリズムがconstexprとなった。未登録
IPFS未登録
📡 0ピア
N=1
CRITICAL
PQS B63