(Translated by https://www.hiragana.jp/)
C++17 - Wikipedia
C++ > C++17

C++17は、プログラミング言語げんごC++国際こくさい規格きかくISO/IEC 14882:2017略称りゃくしょうである。

廃止はいしされた機能きのう

編集へんしゅう

今回こんかい改定かいていではしん機能きのう追加ついかのみではなく、いくつかの機能きのう廃止はいしされている。

  • トライグラフ廃止はいし[1][2]
  • 標準ひょうじゅんライブラリから、すでに推奨すいしょうになっていた std::auto_ptr, std::random_shuffleふくむいくつかのかた関数かんすうふる関数かんすうアダプタがのぞかれた[3][4]。これらはC++11で std::unique_ptrstd::shufflestd::bind、ラムダのような改良かいりょうされた手段しゅだんってわられた。
  • (すでに推奨すいしょうとなっていた) 記憶きおくいきクラス指定していとしてのキーワードregister廃止はいし[5]。キーワード自体じたい使用しよう予約よやくされる。

しん機能きのう

編集へんしゅう
  • 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]
  • __cplusplus201703Lとなった[26]
  • 例外れいがい指定してい関数かんすうかた一部いちぶとなった[27]

以下いかのヘッダが追加ついかされた。

  • <any> — あらゆるかた保持ほじできる std::any クラス
  • <filesystem>ディレクトリファイル操作そうさ
  • <optional>有効ゆうこうまたは無効むこう保持ほじする std::optional クラス
  • <string_view>専用せんよう所有しょゆうけんたずに文字もじシーケンスを参照さんしょうする std::basic_string_view クラス
  • <variant>がた安全あんぜん共用きょうようたいunionstd::variant クラス

脚注きゃくちゅう

編集へんしゅう
  1. ^ N3981: Removing trigraphs??! (Richard Smith)” (2014ねん5がつ6にち). 2015ねん4がつ3にち閲覧えつらん
  2. ^ IBM comment on preparing for a Trigraph-adverse future in C++17, IBM paper N4210, 2014-10-10. Authors: Michael Wong, Hubert Tong, Rajan Bhakta, Derek Inglis
  3. ^ a b c Updates to my trip report”. 2014ねん11月28にち閲覧えつらん
  4. ^ N4190: Removing auto_ptr, random_shuffle(), And Old <functional> Stuff (Stephan T. Lavavej)”. 2014ねん11月28にち閲覧えつらん
  5. ^ C++ Keywords: register”. 2018ねん9がつ3にち閲覧えつらん
  6. ^ N3928: Extending static_assert, v2 (Walter E. Brown)”. 2015ねん4がつ3にち閲覧えつらん
  7. ^ N4051: Allow typename in a template template parameter (Richard Smith)”. 2015ねん4がつ3にち閲覧えつらん
  8. ^ N3922: New Rules for auto deduction from braced-init-list (James Dennett)”. 2014ねん11月28にち閲覧えつらん
  9. ^ N4230: Nested namespace definition (Robert Kawulak, Andrew Tomazos)”. 2014ねん11月28にち閲覧えつらん
  10. ^ a b c d New core language papers adopted for C++17”. 2014ねん11月15にち閲覧えつらん
  11. ^ N4266: Attributes for namespaces and enumerators (Richard Smith)”. 2014ねん11月15にち閲覧えつらん
  12. ^ N4640: Working Draft, Standard for Programming Language C++”. pp. 193–195. 2017ねん3がつ9にち閲覧えつらん
  13. ^ N4267: Adding u8 character literals (Richard Smith)”. 2014ねん11月15にち閲覧えつらん
  14. ^ UTF-8 文字もじれつリテラルは C++11 から存在そんざいする。C++17 では一貫いっかんせい確保かくほのために対応たいおうする文字もじリテラルが追加ついかされるが、そのかたcharかたであり、またUTF-8文字もじリテラルがあつかえるコードポイントの範囲はんいは、C0制御せいぎょ文字もじとラテン基本きほん文字もじ (C0 Controls and Basic Latin Unicode block) すなわち ASCII限定げんていされている。なお、C++標準ひょうじゅんにおける従来じゅうらい文字もじリテラルは、文字もじ符号ふごう方式ほうしきがASCIIであることが保証ほしょうされないため、UTF-8文字もじリテラルはASCIIを保証ほしょうするという移植いしょくせい観点かんてんからも有用ゆうようである。
  15. ^ Thomas Köppe. “Hexadecimal floating literals for C++”. 2017ねん7がつ16にち閲覧えつらん
  16. ^ N4659: Working Draft, Standard for Programming Language C++”. 2017ねん7がつ16にち閲覧えつらん
  17. ^ N4268: Allow constant evaluation for all non-type template arguments (Richard Smith)”. 2014ねん11月15にち閲覧えつらん
  18. ^ N4295: Folding expressions (Andrew Sutton, Richard Smith)”. 2014ねん11月15にち閲覧えつらん
  19. ^ N4659: Working Draft, Standard for Programming Language C++”. 2017ねん3がつ24にち閲覧えつらん
  20. ^ N4659: Working Draft, Standard for Programming Language C++”. 2017ねん3がつ24にち閲覧えつらん
  21. ^ Selection statements with initializer”. 2018ねん10がつ9にち閲覧えつらん
  22. ^ Dynamic memory allocation for over-aligned data”. 2017ねん3がつ14にち閲覧えつらん
  23. ^ Class template argument deduction”. 2019ねん1がつ30にち閲覧えつらん
  24. ^ CppCon 2018: Timur Doumler “Class template argument deduction in C++17””. 2019ねん1がつ30にち閲覧えつらん
  25. ^ N4640: Working Draft, Standard for Programming Language C++”. pp. 431–433. 2017ねん3がつ11にち閲覧えつらん
  26. ^ N4659: Working Draft, Standard for Programming Language C++”. 2017ねん3がつ24にち閲覧えつらん
  27. ^ P0012R1: Make exception specifications be part of the type system, version 5”. 2018ねん12月17にち閲覧えつらん

関連かんれん項目こうもく

編集へんしゅう

外部がいぶリンク

編集へんしゅう