web-dev-qa-db-ja.com

C++ 17の新機能は何ですか?

C++ 17は機能が完成したため、大幅な変更はありません。 C++ 17に向けて何百もの提案が出されました。

C++ 17でC++に追加された機能はどれですか。

「C++ 1z」をサポートするC++コンパイラを使用する場合、コンパイラがC++ 17にアップデートされたときに利用できる機能はどれですか。

941

言語機能

テンプレートと汎用コード

ラムダ

属性

構文の整理

よりきれいなマルチリターンとフロー制御

  • 構造化バインディング

    • 基本的に、ファーストクラスのstd::tieautoname__
    • 例:
      • const auto [it, inserted] = map.insert( {"foo", bar} );
      • map::insertが返すitname__から推測された型で、変数insertedname__およびpairname__を作成します。
    • Tuple/pair-like&std::arraysおよび比較的フラットな構造体で動作します
    • 標準で実際には 構造化バインディング という名前
  • if (init; condition)およびswitch (init; condition)

    • if (const auto [it, inserted] = map.insert( {"foo", bar} ); inserted)
    • if(decl)declname__が賢明に変換可能ではない場合に拡張します。
  • 範囲ベースのforループの一般化

    • 主にセンチネル、またはbegin iteratorと同じ型ではないend iteratorをサポートしているように見えます。これは、ヌル終了ループなどに役立ちます。
  • constexprの場合

    • ほとんど一般的なコードを単純化するために多くの機能を要求されました。

その他の

図書館の追加:

データ型

  • std::variant<Ts...>

    • 私がチェックした最後のほとんどいつも空ではない?
    • タグ付き共用体型
    • {素晴らしい|便利}
  • std::optional

    • 多分何かを持っている
    • とんでもなく便利
  • std::any

    • いずれかのコピーを保持しています(コピー可能)
  • std::string_view

    • 文字配列または部分文字列への参照のようなstd::string
    • 二度とstring const&を取りません。また、bajillionの構文解析を速くすることができます。
    • "hello world"sv
    • constexpr char_traits
  • std::byte 彼らが噛むことができる以上のもの。

    • 整数でも文字でもなく、単なるデータ

ものを起動する

ファイルシステムTS v1

新しいアルゴリズム

  • for_each_n

  • reducename__

  • transform_reduce

  • exclusive_scan

  • inclusive_scan

  • transform_exclusive_scan

  • transform_inclusive_scan

  • スレッド化の目的で追加され、スレッド化していなくても公開される

スレッディング

(の一部) Library Fundamentals TS v1 上または下でカバーされていない

コンテナの改良

スマートポインタの変更

その他のstdname__データ型の改善点:

その他の

特性

廃止予定

Isocpp.orgは持っています はC++ 14以降の独立した変更点のリストを持っています。それは部分的に略奪されました。

当然のことながらTSの作業は並行して行われるので、次の反復を待たなければならないような、あまり熟していないTSがいくつかあります。次の反復の目標は、以前に計画されていたC++ 20であり、一部の噂が暗示しているC++ 19ではありません。 C++ 1Oは避けられました。

最初のリストは このreddit投稿このreddit投稿 から取得しました。リンクはgoogling経由で、または上記のisocpp.orgページから追加されました。

SD-6 feature-testリストから追加のエントリが追加されました。

その次に clangの機能リストライブラリ機能リスト があります。 C++ 17ではなく、C++ 1zなので、これは信頼できるものではないようです。

これらのスライド には他の場所で欠けているいくつかの機能がありました。

「削除されたもの」は尋ねられませんでしたが、C++ 17でC++から削除された(ほとんどが以前は推奨されていなかった)いくつかのことを簡単に説明します。

削除されました:

言い換えがありました。これらがコードに何らかの影響を与えるのか、それとも単に標準のクリーンアップなのか、私にはわかりません。

論文はまだ上記に統合されていません。

  • P0505R0 (constexpr chrono)

  • P0418R2 (アトミック微調整)

  • P0512R0 (テンプレート引数の控除の調整)

  • P0490R0 (構造化バインディングの調整)

  • P0513R0std::hashへの変更)

  • P0502R0 (並列例外)

  • P0509R1 (例外処理の制限事項の更新)

  • P0012R1 (例外指定を型システムの一部にする)

  • P0510R0 (亜種の制限)

  • P0504R0 (オプション/バリアント/任意のタグ)

  • P0497R0 (共有ptrの調整)

  • P0508R0 (構造化バインディングノードハンドル)

  • P0521R0 (共有ポインタはカウントと一意の変更を使用しますか?)

仕様変更:

さらなる参照:

1204