C++17
ウィキペディアから
廃止された機能
今回の改定では新機能の追加のみではなく、いくつかの機能が廃止されている。
新機能
要約
視点
言語
static_assert
の診断メッセージを省略可能とした[6]。- テンプレートのテンプレートのパラメータに (
class
の代わりに)typename
を使えるようにした[7]。 - 初期化リストからの型推論 (
auto
) 規則を新設[8][3]。 - 入れ子の名前空間の定義を
namespace X { namespace Y { … } }
等とする代わりにnamespace X::Y { … }
と書けるようにした[3][9]。 - 名前空間や列挙型に属性を書けるようにした[10][11]。
- 新たに
[[fallthrough]]
、[[maybe_unused]]
、[[nodiscard]]
属性を標準に追加[12]。 - UTF-8 (
u8
) 文字リテラル[10][13][14]。 - 十六進浮動小数点リテラル[15][16]。
- 全ての非型テンプレート引数における定数評価[10][17]。
- 可変長引数テンプレートにおける畳み込み式[10][18]。
if constexpr(expression)
の形式によるコンパイル時の静的if
[19]。- 構造化束縛宣言。
auto [a, b] = getTwoReturnValues();
のように書くことができるようになった[20]。 if
文およびswitch
文での初期化子[21]。T
型 (トップレベルのcv修飾を無視する) の純粋右辺値式からT
型のオブジェクトをコピー初期化および直接初期化するとき、純粋右辺値式からコピーコンストラクタやムーブコンストラクタが呼ばれなくなった。詳細は「コピーの省略」を参照のこと。- over-aligned なメモリ確保に関する拡張[22]。
- クラステンプレートの実引数推定 (Class Template Argument Deduction: CTAD)。コンストラクタの推定ガイドが導入されたことで、
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]。- 例外指定が関数の型の一部となった[27]。
ライブラリ
以下のヘッダが追加された。
脚注
関連項目
外部リンク
Wikiwand - on
Seamless Wikipedia browsing. On steroids.