1. ホーム
  2. c++

[解決済み】C++17の新機能は何ですか?

2022-03-23 11:23:28

質問

C++17は機能が完成しているので、大きな変更はなさそうです。C++17には何百もの提案がなされている。

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

"C++1z"をサポートするC++コンパイラを使用する場合、コンパイラがC++17にアップデートしたときに利用できるようになる機能はどれでしょうか?

どのように解決するのですか?

言語の特徴

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

ラムダ

属性

シンタックスクリーンアップ

クリーナーマルチリターンとフローコントロール

  • 構造化バインディング

  • 基本的にファーストクラス std::tieauto

  • 例 * const auto [it, inserted] = map.insert( {"foo", bar} ); * 変数を作成する itinserted から型が推測されます。 pair その map::insert を返します。

  • Tuple/pair-likes & で動作します。 std::array と比較的フラットな構造体

  • 実際の名称 構造化バインディング 標準では

  • if (init; condition)switch (init; condition)

  • if (const auto [it, inserted] = map.insert( {"foo", bar} ); inserted)

  • を拡張する。 if(decl) を使用する場合 decl は賢明にconvertible-to-boolされない。

  • 範囲指定型forループの一般化

    • センチネル、または開始イテレータと同じ型でない終了イテレータのサポートが主であるように見えます。
  • もしconstexpr

  • ほぼ一般的なコードを簡素化するために、多くの要望があった機能です。

その他

ライブラリの追加。

データ型

  • std::variant<Ts...>

  • ほぼ常に空でないことを確認しましたか?

  • タグ付きユニオンタイプ

  • {すごい|便利}。

  • std::optional

    • たぶん、何か1つ持っている
    • バカバカしいほど便利
  • std::any

    • コピー可能なものなら何でも1個収納可能
  • std::string_view

    • std::string 文字配列への参照や部分文字列のように
    • は絶対に取らないようにしましょう。 string const& をもう一度。 また、パースも何億倍も速くなります。
    • "hello world"sv
    • constexpr char_traits
  • std::byte を、噛み切れないほどの量にした。

    • 整数でも文字でもない、ただのデータ

呼び出すもの

ファイルシステムTS v1

新しいアルゴリズム

  • for_each_n

  • reduce

  • transform_reduce

  • exclusive_scan

  • inclusive_scan

  • transform_exclusive_scan

  • transform_inclusive_scan

  • スレッド化するために追加され、スレッド化して使用していない場合でも公開される

スレッド

(の部分) ライブラリの基礎知識TS v1 上にも下にもない

コンテナの改善

スマートポインタの変更

その他 std datatypeの改良。

その他

特徴

非推奨

Isocpp.orgは には、C++14 からの変更点の独立したリストがあります。

当然ながらTSの作業は並行して行われているので、次のイテレーションを待たなければならない、まだ熟していないTSもあります。 次のイテレーションのターゲットは、一部の噂にあったようなC++19ではなく、以前から計画されていたC++20です。 C++1Oは回避されました。

初期リスト このredditの投稿 このREDDITポスト というように、ググったり、上記のisocpp.orgのページからリンクを貼っています。

その他のエントリーは以下から引用しています。 SD-6 feature-test リスト。

clangの機能一覧 ライブラリ機能一覧 は次に略奪される。 C++17ではなくC++1zなので、これは信頼できなさそうです。

このスライドは は、他で欠けている機能がありました。

何が削除されたのか"は問われませんでしたが、C++17でC++から削除されたいくつかのもの(主に?)以前の非推奨のものを簡単にリストアップします。

削除されました。

言い直しがありました。 これらがコードに影響を与えるものなのか、それとも単に規格の整理なのかは不明です。

まだ上記に統合されていない論文。

  • P0505R0 (constexpr chrono)

  • P0418R2 (アトム調整)

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

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

  • P0513R0 (に変更)。 std::hash )

  • P0502R0 (並列例外)

  • P0509R1 (例外処理に関する制限の更新)

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

  • P0510R0 (バリアントに関する制限)

  • P0504R0 (オプション/変量/任意のタグ)

  • P0497R0 (共有 ptr の調整)

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

  • P0521R0 (共有ポインタの使用回数とユニークな変更?)

仕様の変更

その他の参考資料