Skip to content

Latest commit

 

History

History
122 lines (88 loc) · 9.63 KB

File metadata and controls

122 lines (88 loc) · 9.63 KB

C++29

概要

C++29とは、2029年中に改訂される予定の、C++バージョンの通称である。

このバージョンは、策定中のためC++2dと呼ばれることがある。「(2020年代の4つ目のバージョンが) 202d年にリリースされる」という伏せ字として「d」が使われているが、3年周期に次のバージョンが策定されることが決まっているため、伏せ字になっている年数がずれることはない。

言語機能

変数

言語機能 説明
浮動小数点数のオーバーフローの動作の明確化 浮動小数点演算のオーバーフロー時の動作を明確に規定する
非決定的なポインタの由来 ポインタの由来を非決定的として扱うメモリモデルを整備する
無効なポインタ操作の扱いを整理 解放済みなど無効なポインタに対する操作の扱いを整理・規定する
ポインタの生存期間終了によるzap問題の解決案 生存期間終了時にポインタ値が無効化される「zap」問題への解決策

文字列

言語機能 説明
名前付きユニバーサル文字エスケープを追加 \N{...}で使える名前付き文字エスケープを拡張する

制御構文

言語機能 説明
return_valuereturn_voidは排他的ではない コルーチンのpromise型がreturn_valuereturn_voidの両方を持つことを許容する

関数

言語機能 説明
ラムダの字句順序 ラムダ式の字句上の順序を明確化する
例外を送出する例外指定をもつ解放関数を不適格とする throwする可能性がある例外指定を持つoperator deleteを不適格にする

クラス

言語機能 説明
基底クラスに対する指示付き初期化 集成体初期化の.member = …を基底クラス部分にも使えるよう拡張する
後置インクリメント・デクリメント演算のdefault定義 後置++--= defaultで定義(前置版から自動生成)できるようにする
default定義された代入演算子関数へ制約を追加 = defaultで定義された代入演算子関数に制約を追加できるようにする
契約を仮想関数に対応させる 仮想関数に契約を適用できるようにする

テンプレート

言語機能 説明
テンプレートに対する言語リンケージ テンプレートにextern "C"等の言語リンケージを適用する規則を整備する
複合要件における条件付きnoexcept指定 コンセプトの複合要件{ 式 } noexceptで条件付きnoexceptを書けるようにする
テンプレート名に対するパック添字アクセス テンプレート名のパックにT...[N]形式の添字アクセスを可能にする

定数式

言語機能 説明
consteval時のみの値 consteval文脈でのみ存在・利用できる値の扱いを規定する

プリプロセッサ

言語機能 説明
#embedのオフセット引数 #embedにオフセット指定を追加し、埋め込むデータの開始位置を設定できるようにする

未定義動作

言語機能 説明
未定義動作とIFNDRの付録を整理 規格中のUBとIFNDR(診断不要の不適格)を付録として一覧化・整理する

ソースコード

言語機能 説明
新しいUnicode勧告に従った識別子の調整 識別子に使える文字を最新のUnicode勧告に合わせて調整する

ライブラリ更新の概要

整数

文字列

  • std::format()関数での浮動小数点数の規定の出力形式を修正
    • これまでの既定書式が最短文字数を基準としていたため、100000.0"1e+05"なのに120000.0"120000"と一貫していない出力になっていたのを修正
    • また、大きな値で1234567890123456774144のような無意味な桁(garbage digits)がでる問題について、固定表記か指数表記かの切り替え基準を「値の大きさ(指数範囲 [10⁻⁴, 10ⁿ))」に変更して修正した

ビット操作

コンテナ

メモリ

エラーハンドリング

  • std::error_codeクラスのオブジェクトを文字列化する際の、カテゴリ名のエンコーディングの問題を修正し、std::format()用のformatter特殊化を追加

並行・並列

非推奨化

  • <iostream>において、signed char / unsigned charの入出力を非推奨化。std::int8_t / std::uint8_tの別名として扱われるこれらの型の入出力で、整数型であることを期待して予期せぬ結果を招く可能性があった