C++17は、プログラミング言語C++の国際規格ISO/IEC 14882:2017の略称である。
今回の改定では新機能の追加のみではなく、いくつかの機能が廃止されている。
std::auto_ptr
,std::random_shuffle
を含むいくつかの型や関数、古い関数アダプタが取り除かれた[3][4]。これらはC++11でstd::unique_ptr
、std::shuffle
、std::bind
、ラムダのような改良された手段に取って代わられた。register
の廃止[5]。キーワード自体は未使用で予約される。static_assert
の診断メッセージを省略可能とした[6]。class
の代わりに)typename
を使えるようにした[7]。auto
) 規則を新設[8][3]。namespaceX{namespaceY{…}}
等とする代わりにnamespaceX::Y{…}
と書けるようにした[3][9]。[[fallthrough]]
、[[maybe_unused]]
、[[nodiscard]]
属性を標準に追加[12]。u8
) 文字リテラル[10][13][14]。ifconstexpr(expression)
の形式によるコンパイル時の静的if
[19]。auto[a,b]=getTwoReturnValues();
のように書くことができるようになった[20]。if
文およびswitch
文での初期化子[21]。T
型 (トップレベルのcv修飾を無視する) の純粋右辺値式からT
型のオブジェクトをコピー初期化および直接初期化するとき、純粋右辺値式からコピーコンストラクタやムーブコンストラクタが呼ばれなくなった。詳細は「コピーの省略」を参照のこと。std::pair<double,bool>(5.0,false)
のようなコンストラクタの引数の型や、std::make_pair(5.0,false)
のようなヘルパー関数テンプレートが必要なくなり、std::pair(5.0,false)
のように書くことができるようになった[23][24]。__has_include
でヘッダが利用可能かをプリプロセッサディレクティブで確認できるようになった[25]。__cplusplus
の値は201703L
となった[26]。以下のヘッダが追加された。
<any>
— あらゆる型を保持できるstd::any
クラス<filesystem>
—ディレクトリやファイルの操作<optional>
— 有効または無効な値を保持するstd::optional
クラス<string_view>
— 読み取り専用で所有権を持たずに文字シーケンスを参照するstd::basic_string_view
クラス<variant>
— 型安全な共用体(union
)std::variant
クラスchar
型であり、またUTF-8文字リテラルが扱えるコードポイントの範囲は、C0制御文字とラテン基本文字 (C0 Controls and Basic Latin Unicode block) すなわちASCII に限定されている。なお、C++標準における従来の文字リテラルは、文字符号化方式がASCIIであることが保証されないため、UTF-8文字リテラルはASCIIを保証するという移植性の観点からも有用である。![]() | ![]() | この項目は、まだ閲覧者の調べものの参照としては役立たない、コンピュータに関連した書きかけの項目です。この項目を加筆・訂正などしてくださる協力者を求めています(P:コンピュータ)。 |
C++の機能 | |
---|---|
標準C++ライブラリ | |
コンパイラ | |
統合開発環境 | |
関連言語 | |