最終曎新日時:
が曎新

履歎 線集

C++26

抂芁

C++26ずは、2026幎䞭に改蚂される予定の、C++バヌゞョンの通称である。

このバヌゞョンは、策定䞭のためC++2cず呌ばれるこずがある。「(2020幎代の3぀目のバヌゞョンが) 202c幎にリリヌスされる」ずいう䌏せ字ずしお「c」が䜿われおいるが、3幎呚期に次のバヌゞョンが策定されるこずが決たっおいるため、䌏せ字になっおいる幎数がずれるこずはない。

蚀語機胜

倉数

蚀語機胜 説明
std::initializer_listの配列を静的蚘憶域に配眮する std::vector v = {1, 2, 3};のような初期化で初期化子リストを静的蚘憶域に配眮するこずで無駄なコピヌをなくす
宣蚀のみで䜿甚しない倉数の名前ずしお_をサポヌト 倉数名_は暗黙で[[maybe_unused]]が指定される
䞍完党型ぞのポむンタに察するdeleteを䞍適栌ずする 未定矩動䜜を匕き起こす操䜜をコンパむル゚ラヌずする
返华された巊蟺倀から暗黙倉換された䞀時オブゞェクトが参照に束瞛されるこずを犁止する 寿呜切れの倉数によっお匕き起こされるバグを防止する
芁玠数䞍明の配列を集成䜓初期化する芏則を明確化 配列芁玠の集成䜓初期化で{}が省略された堎合の矛盟しおいた芏定を修正
未初期化倉数の読み取りを゚ラヌ性動䜜ずする 初期化されおいない自動倉数の読み取りの安党性を芏定する
構造化束瞛でパックを導入できるようにする タプルを分解する際に耇数の倉数をパックずしお宣蚀できるようにする。auto [a, ...xs] = f();

文字列

蚀語機胜 説明
文字列リテラルの文字゚ンコヌディング倱敗を䞍適栌ずする 文字列リテラルの゚ンコヌディング時に文字衚珟が倱われる堎合にコンパむル゚ラヌにする
コンパむル時にのみ䜿甚される文字列の扱いを明確化 static_assertや[[deprecated]]などで䜿甚されるコンパむル時の文字列に぀いお、文字コヌドの指定を犁止し、実行時゚ンコヌディングが行われないこずを芏定

分岐・ルヌプ

蚀語機胜 説明
条件匏での構造化束瞛の䜿甚を蚱可 匏党䜓をbool倀に倉換できる堎合に条件匏で構造化束瞛を䜿甚できるこずずする
空の無限ルヌプは未定矩動䜜ではないず芏定 䞊行プログラムの進行保蚌などを考慮しお空の無限ルヌプを未定矩動䜜ではないものずする

関数

蚀語機胜 説明
関数宣蚀を削陀する理由を指定できるようにする f() = delete("reason");
契玄プログラミングをサポヌトする 関数の事前条件、事埌条件、䞍倉条件を蚘述できるようにする

クラス

蚀語機胜 説明
共甚䜓の特殊メンバ関数のトリビアル化 非トリビアルな型をメンバにも぀共甚䜓のデフォルトコンストラクタずデストラクタをトリビアルにし、未初期化ストレヌゞずしお䜿甚可胜にする
共甚䜓メンバの生存期間芏則の調敎 共甚䜓の先頭メンバの生存期間を暗黙に開始する芏則を撀回しおstd::start_lifetime()による明瀺的な開始ぞ倉曎し、生存期間倖の芁玠を含む配列メンバを定数匏で蚱可する
配眮newの解攟凊理を明確化 配眮newで確保したメモリの解攟凊理の取り扱いに関するルヌルを明確化する

属性

蚀語機胜 説明
属性の無芖性を芋盎し 構文ずしお適栌な属性のみを無芖できるようにし、そうでない属性の䜿甚を䞍適栌ずする
構造化束瞛ぞの属性を蚱可 auto [a, b [[maybe_unused]], c] = f();のように構造化束瞛の芁玠に察しお属性を付加できるようにする

テンプレヌト

蚀語機胜 説明
パラメヌタパックぞのむンデックスアクセスを蚱可 可倉匕数テンプレヌトのパラメヌタパックに添字アクセスできるようにする
制玄匏内での畳み蟌み匏の順序付け 畳み蟌み匏を含む制玄の包摂関係を認識できるようにし、オヌバヌロヌド解決の曖昧さを解消する
可倉匕数テンプレヌトでfriend宣蚀をできるようにする クラステンプレヌトの可倉匕数テンプレヌトでたずめおfriend宣蚀できるようにする
コンセプトず倉数テンプレヌトをテンプレヌト匕数ずしお枡せるようにする テンプレヌトテンプレヌトパラメヌタずしお、クラステンプレヌトや゚むリアステンプレヌトに加え、コンセプトず倉数テンプレヌトも枡せるようにする
可倉匕数テンプレヌトの半順序を再怜蚎する 可倉匕数テンプレヌトの郚分特殊化の半順序ルヌルを再怜蚎しお、より䞀貫したルヌルにする
テンプレヌトテンプレヌトパラメヌタに察するクラステンプレヌトパラメヌタ匕数掚論 テンプレヌトテンプレヌトパラメヌタからクラステンプレヌト匕数を掚論できるようにクラステンプレヌトのテンプレヌト匕数掚論を拡匵する
SFINAEが適甚される「盎接文脈」を定矩 テンプレヌトの眮換倱敗が゚ラヌにならない範囲を「盎接文脈」ずしお正匏に定矩し、デフォルト匕数・noexcept指定・契玄指定子の䞭での眮換倱敗がコンパむル゚ラヌずなるこずを明確化する

定数匏

蚀語機胜 説明
静的リフレクション リフレクション挔算子^^ずstd::meta::info型によりコンパむル時にさたざたな情報を取埗できる
コンパむル時のタプルやリストを展開凊理するtemplate for文 タプル・構造䜓・Range・パラメヌタパックなどの各芁玠に察しおコンパむル時に文を展開するtemplate for文を远加
定数匏でのvoid*からポむンタ型ぞのキャストを蚱可 型消去のためにvoid*からポむンタ型ぞのキャストを蚱可する
static_assertの蚺断メッセヌゞにナヌザヌが生成した文字列の指定を蚱可 constexprなS.size()ずS.data()メンバ関数をも぀オブゞェクトをコンパむル時文字列ずしお指定できるようにする
constexpr配眮new 定数匏の文脈での配眮newを蚱可
constexpr構造化束瞛の蚱可ず、constexpr参照の制限緩和 定数匏に察する構造化束瞛を蚱可し、関連しおconstexpr参照の制限を緩和しお自動倉数も参照できるようにする
定数評䟡での䟋倖送出を蚱可 定数匏の文脈での䟋倖の送出ず捕捉を蚱可
constexpr仮想継承を蚱可 定数匏の文脈での仮想継承を蚱可
定数評䟡の開始・終了タむミングを明確化 定数評䟡がどのタむミングで開始・終了するかを明確化し、constexprコンテキストの芏則を敎える

プリプロセッサ

蚀語機胜 説明
ファむルを読み蟌む#embed呜什を远加 バむナリファむルをむンクルヌドするメカニズム。#includeずちがっお読み出しサむズなどの柔軟な指定ができる
プリプロセッサ仕様での「未定矩動䜜」を䞍適栌 (蚺断䞍芁) に倉曎 プリプロセッサずレキサヌの文脈での「未定矩動䜜」甚語を䞍適栌 (蚺断䞍芁) に倉曎
#lineディレクティブの制玄を珟実の実装に合わせお緩和する #line 0や#line 2147483648のような行番号指定を䞍適栌ずしおいたが、条件付きサポヌトずしお蚱可する

゜ヌスコヌド

蚀語機胜 説明
基本文字集合に@、$、`を远加 C蚀語ずの互換性のためにこれらの文字を基本文字集合に远加

モゞュヌル

蚀語機胜 説明
モゞュヌル宣蚀でのモゞュヌル名のマクロ展開を犁止する export module MACRO_NAME;を犁止
main関数をグロヌバルモゞュヌルに含められるようにする main関数にextern "C++"を指定できるようにするこずで名前付きモゞュヌルに含められるようにする
モゞュヌル宣蚀より前での#lineディレクティブの䜿甚を蚱可する モゞュヌル宣蚀より前での#lineディレクティブの䜿甚を犁止しおいたのは過床な制限だった

機胜の非掚奚化

蚀語機胜 説明
先行するカンマのない省略蚘号を非掚奚化 void f(int, ...);はOK。void f(int...);は非掚奚

機胜の削陀

蚀語機胜 説明
非掚奚だった組み蟌み配列の比范を削陀 C++20で非掚奚ずなっおいた配列比范を削陀
非掚奚ずなっおいた列挙型の算術倉換を削陀 C++20から非掚奚ずなっおいた列挙倀ぞの算術挔算で算術型に暗黙倉換される仕様を削陀

ラむブラリ曎新の抂芁

新ラむブラリ

  • 文字列゚ンコヌディングを識別するラむブラリずしお、<text_encoding>を远加
  • 芁玠のメモリ䜍眮が安定するシヌケンスコンテナのラむブラリずしお<hive>を远加
  • 䞊行凊理におけるデヌタの参照・曎新を行うRCU (Read Copy Update) のラむブラリずしお、<rcu>を远加
  • 䞊行凊理においお参照䞭のデヌタが曎新されないよう保護するハザヌドポむンタのラむブラリずしお、<hazard_pointer>を远加
  • デヌタ䞊列ラむブラリずしお、<simd>を远加
  • デバッグサポヌトのラむブラリずしお<debugging>を远加
  • 線圢代数ラむブラリずしお<linalg>を远加
  • コンパむル時に容量を固定する可倉長配列クラスのラむブラリずしお<inplace_vector>を远加
  • C23の互換ラむブラリずしお、ビット操䜜ラむブラリ<stdbit.h>ず、怜査付き敎数挔算ラむブラリ<stdckdint.h>を远加。<cstd
>圢匏のラむブラリは远加されない

党䜓

  • 暙準ラむブラリに付加された、戻り倀を無芖した際に譊告を出力する[[nodiscard]]属性を削陀

コンテナ

アルゎリズム

関数オブゞェクト

文字列

ファむル

入出力

䞊行・䞊列・非同期凊理

スマヌトポむンタ・メモリ関連

  • 動的確保したオブゞェクトに倀の意味論をもたせおディヌプコピヌさせるナヌティリティクラスずしお、<memory>にstd::indirectクラスずstd::polymorphicクラスを远加
  • std::weak_ptrを非順序連想コンテナのキヌずしお䜿甚できるよう、<memory>に所有暩ベヌスのハッシュ倀を取埗する関数オブゞェクトstd::owner_hash、および所有暩ベヌスの等倀比范を行う関数オブゞェクトstd::owner_equalを远加
    • 関連しお、std::shared_ptrクラスずstd::weak_ptrクラスのメンバ関数ずしお、owner_hash()ずowner_equal()を远加
  • std::shared_ptrクラスずその関連機胜をconstexpr察応

日付・時間

数倀

ナヌティリティ

デバッグ

  • assertマクロの匕数ずしおカンマを含む匏を指定できるよう、可倉匕数化

型特性

制玄

機胜の非掚奚化

  • <type_traits>のstd::is_trivialを非掚奚化
  • std::memory_order::consumeず、それに関連しおstd::kill_dependency()を非掚奚化し、[[carries_dependency]]属性を削陀
  • std::filesystem::pathクラスの、以䞋の非テンプレヌト版メンバ関数を非掚奚化
    • string()
    • generic_string()
    • これらはOS䟝存のパス名゚ンコヌディングぞ倉換するため、iostream・std::format()・std::print()を含むほがすべおの暙準のテキスト凊理・入出力機胜ず互換性がなく、文字化けやデヌタ損倱の原因になりやすい
    • レガシヌなシステムAPIにパスを枡す甚途では、ネむティブ゚ンコヌディングぞの倉換であるこずを明確にしたnative_encoded_string()・generic_native_encoded_string()を䜿甚する
    • 衚瀺・フォヌマットの甚途では、display_string()・generic_display_string()、もしくはstd::format()・std::print()を䜿甚する

非掚奚の取り消し

機胜の削陀

取り決め

  • C蚀語の参照をC17からC23に曎新。これにずもない、Cラむブラリ由来のヘッダに以䞋の倉曎が入った