江添亮の詳説 C++17』の読書メモです。

読書メモ

  • 第 1 章「SD-6 C++ のための機能テスト推奨」
    • 特になし。
  • 第 2 章「C++14 のコア言語の新機能」
    • auto と decltype(auto) の推論方法の違いの話と、ラムダ式のコピーキャプチャーが非 static データメンバーをコピーしないという話は Effective Modern C++ で読んだ気がするけどすっかり忘れてたな。普段使わないものはすぐに忘れる。
  • 第 3 章「C++17 のコア言語の新機能」
    • トライグラフ知らなかった。
    • 文字列なし static_assert、[[fallthrough]] 属性、構造化束縛、std::byte は嬉しい。
    • fold 式と constexpr if 文はちゃんと使える気がしない。
    • inline 変数の歴史的な解説とクラスの非 static メンバーでの使用例が良かった。
  • 第 4 章「C++17 の型安全な値を格納するライブラリ」
    • std::variant, std::any, std::optional の包括的な使い方について。
    • optional は Chromium で互換ライブラリを使ってるけど、variant と any は馴染みがなかったので色々ためになった。std::in_place_type で emplace 構築できるの知らなかった。std::any はテンプレートじゃないらしい。型は auto みたく推論して保持するのかな?
  • 第 5 章「string_view : 文字列ラッパー」
    • 使い方や仕組みの話。
    • 5.5.1 の remove_prefix と remove_suffix のところで “このメンバー関数は既存の std::string にも追加されている。” とあるけど、cppreference.com などを見ても載ってないのが気になる。仕様にはあるのかな?
  • 第 6 章「メモリーリソース : 動的ストレージ確保ライブラリ」
    • メモリーリソースという新しいメモリ管理インタフェースの話。
    • システムデフォルトの実装以外にプールリソースとモノトニックバッファーリソースの実装を提供。
    • プールリソースはスレッド間で同期を取る実装もある。
    • polymorphic_allocator の説明がよく分かってない。従来のようにテンプレートでアロケータ型を指定する形式でも、実行時にコンストラクタでアロケーターの実装を切り替えできるような?
  • 第 7 章「並列アルゴリズム」
    • algorithm の並列版について。既存関数のオーバロードとして実装されていて、引数で実行ポリシーを選択。ポリシーにはシーケンシャル、パラレル、パラレルかつベクトル実行がある。その他、ユーザ定義の関数オブジェクトに対する制約、ベクトル化非安全など。
  • 第 8 章「数学の特殊関数群」
    • 流し読み。
    • cmath が提供する数学関数の紹介。残念ながら自分には各関数がどういった用途に使われているのか分からない…
    • 非メンバ関数のことをフリー関数って呼ぶの知らなかった。
  • 第 9 章「その他の標準ライブラリ」
    • C++17 で追加されたライブラリの雑多な紹介。
    • boyer_moore_searcher、sample、コンテナでの不完全型のサポート、ノードハンドル辺りが気になった。
  • 第 10 章「ファイルシステム」
    • ファイルパスの抽象化の話を読んで昔の仕事を思い出した。
    • std::filesystem::path が operator/() をオーバーロードしてセパレータ区切りのファイルパス文字列の追加を実現してるの面白いね。path = “x”; path / “y” / “z”; で “x/y/z” というパスができる。

感想

てっきり仕様の細かい話ばかりの本だと思ってたけど、実際は使い方や注意点、知っておくべき内部の仕組みが平易に書かれていて読みやすかったです