関連サイト
本書の関連ページが用意されています。
内容紹介
◆C++17の詳細を知る
プログラミング言語C++の標準化委員としても活動する筆者が、最新の国際規格となるC++17について詳しく解説します。コア言語の変更点、並列処理や非同期処理に対する機能追加、ライブラリの修正/変更など、複雑化する今日のコンピュータアーキテクチャに対応したC++17の新機能のほぼすべてが網羅されています。
本書は2017年に規格制定されたプログラミング言語C++の国際規格、ISO/IEC14882:2017の新機能をほぼすべて解説している。
新しいC++17は不具合を修正し、プログラマーの日々のコーディングを楽にする新機能がいくつも追加された。その結果、C++の特徴であるパフォーマンスや静的型付けは損なうことなく、近年の動的な型の弱い言語に匹敵するほどの柔軟な記述を可能にしている。
人によっては、新機能を学ぶのは労多くして益少なしと考えるかもしれぬが、C++の新機能は現実の問題を解決するための便利な道具として追加されるもので、仮に機能を使わないとしても問題はなくならないため、便利な道具なく問題に対処しなければならぬ。また、C++の機能は一般的なプログラマーにとって自然だと感じるように設計されているため、利用は難しくない。もしC++が難しいと感じるのであれば、それはC++が解決すべき現実の問題が難しいのだ。なんとなれば、我々は理想とは程遠い歪なアーキテクチャのコンピューターを扱う時代に生きている。CPUの性能上昇は停滞し、メモリはCPUに比べて遥かに遅く、しかもそのアクセスは定数時間ではない。キャッシュに収まる局所性を持つデータへの操作は無料同然で、キャッシュサイズの単位はすでにMBで数えられている。手のひらに乗る超低電力CPUでさえマルチコアが一般的になり、並列処理、非同期処理は全プログラマーが考慮せねばならぬ問題になった。
そのような時代にあたっては、かつては最良であった手法はその価値を失い、あるいは逆に悪い手法と成り下がる。同時に昔は現実的ではなかった手法が今ではかえってまともな方法になることさえある。このため、現在活発に使われている生きている言語は、常に時代に合わない機能を廃止し、必要な機能を追加する必要がある。C++の発展はここで留まることなく、今後もC++が使われ続ける限り、修正と機能追加が行われていくだろう。
(「まえがき」より)
書誌情報
- 著者: 江添亮
- 発行日: 2018-03-09 (紙書籍版発行日: 2018-03-09)
- 最終更新日: 2018-03-09
- バージョン: 1.0.0
- ページ数: 287ページ(PDF版換算)
- 対応フォーマット: PDF, EPUB
- 出版社: アスキードワンゴ
対象読者
著者について
江添亮
目次
序
- 0.1 C++の規格
- 0.2 C++ の将来の規格
- 0.3 コア言語とライブラリ
第1章 SD-6 C++のための機能テスト推奨
- 1.1 機能テストマクロ
- 1.2 __has_include式 : ヘッダーファイルの存在を判定する
- 1.3 __has_cpp_attribute式
第2章 C++14 のコア言語の新機能
- 2.1 二進数リテラル
- 2.2 数値区切り文字
- 2.3 [[deprecated]] 属性
- 2.4 通常の関数の戻り値の型推定
- 2.5 decltype(auto) : 厳格なauto
- 2.6 ジェネリックラムダ
- 2.7 初期化ラムダキャプチャー
- 2.8 変数テンプレート
- 2.9 constexpr関数の制限緩和
- 2.10 メンバー初期化子とアグリゲート初期化の組み合わせ
- 2.11 サイズ付き解放関数
第3章 C++17のコア言語の新機能
- 3.1 トライグラフの廃止
- 3.2 16進数浮動小数点数リテラル
- 3.3 UTF-8文字リテラル
- 3.4 関数型としての例外指定
- 3.5 fold式
- 3.6 ラムダ式で *this のコピーキャプチャー
- 3.7 constexprラムダ式
- 3.8 文字列なしstatic_assert
- 3.9 ネストされた名前空間定義
- 3.10 [[fallthrough]] 属性
- 3.11 [[nodiscard]] 属性
- 3.12 [[maybe_unused]] 属性
- 3.13 演算子のオペランドの評価順序の固定
- 3.14 constexpr if 文 : コンパイル時条件分岐
- 3.15 初期化文付き条件文
- 3.16 クラステンプレートのコンストラクターからの実引数推定
- 3.17 autoによる非型テンプレートパラメーターの宣言
- 3.18 using属性名前空間
- 3.19 非標準属性の無視
- 3.20 構造化束縛
- 3.21 inline変数
- 3.22 可変長using宣言
- 3.23 std::byte : バイトを表現する型
第4章 C++17の型安全な値を格納するライブラリ
- 4.1 variant : 型安全なunion
- 4.2 any : どんな型の値でも保持できるクラス
- 4.3 optional : 値を保有しているか、していないクラス
第5章 string_view : 文字列ラッパー
- 5.1 使い方
- 5.2 basic_string_view
- 5.3 文字列の所有、非所有
- 5.4 string_viewの構築
- 5.5 string_viewの操作
- 5.6 ユーザー定義リテラル
第6章 メモリーリソース : 動的ストレージ確保ライブラリ
- 6.1 メモリーリソース
- 6.2 polymorphic_allocator : 動的ポリモーフィズムを実現するアロケーター
- 6.3 プログラム全体で使われるメモリーリソースの取得
- 6.4 標準ライブラリのメモリーリソース
- 6.5 プールリソース
- 6.6 モノトニックバッファーリソース
第7章 並列アルゴリズム
- 7.1 並列実行について
- 7.2 使い方
- 7.3 並列アルゴリズム詳細
第8章 数学の特殊関数群
- 8.1 ラゲール多項式(Laguerre polynomials)
- 8.2 ラゲール陪多項式(Associated Laguerre polynomials)
- 8.3 ルジャンドル多項式(Legendre polynomials)
- 8.4 ルジャンドル陪関数(Associated Legendre functions)
- 8.5 球面ルジャンドル陪関数(Spherical associated Legendre functions)
- 8.6 エルミート多項式(Hermite polynomials)
- 8.7 ベータ関数(Beta function)
- 8.8 第1種完全楕円積分(Complete elliptic integral of the first kind)
- 8.9 第2種完全楕円積分(Complete elliptic integral of the second kind)
- 8.10 第3種完全楕円積分(Complete elliptic integral of the third kind)
- 8.11 第1種不完全楕円積分(Incomplete elliptic integral of the first kind)
- 8.12 第2種不完全楕円積分(Incomplete elliptic integral of the second kind)
- 8.13 第3種不完全楕円積分(Incomplete elliptic integral of the third kind)
- 8.14 第1種ベッセル関数(Cylindrical Bessel functions of the first kind)
- 8.15 ノイマン関数(Cylindrical Neumann functions)
- 8.16 第1種変形ベッセル関数(Regular modified cylindrical Bessel functions)
- 8.17 第2種変形ベッセル関数(Irregular modified cylindrical Bessel functions)
- 8.18 第1種球ベッセル関数(Spherical Bessel functions of the first kind)
- 8.19 球ノイマン関数(Spherical Neumann functions)
- 8.20 指数積分(Exponential integral)
- 8.21 リーマンゼータ関数(Riemann zeta function)
第9章 その他の標準ライブラリ
- 9.1 ハードウェア干渉サイズ(キャッシュライン)
- 9.2 std::uncaught_exceptions
- 9.3 apply : tuple の要素を実引数に関数を呼び出す
- 9.4 Searcher : 検索
- 9.5 sample : 乱択アルゴリズム
- 9.6 shared_ptr<T[]> : 配列に対するshared_ptr
- 9.7 as_const : const性の付与
- 9.8 make_from_tuple : tupleの要素を実引数にコンストラクターを呼び出す
- 9.9 invoke : 指定した関数を指定した実引数で呼び出す
- 9.10 not_fn : 戻り値の否定ラッパー
- 9.11 メモリー管理アルゴリズム
- 9.12 shared_ptr::weak_type
- 9.13 void_t
- 9.14 bool_constant
- 9.15 type_traits
- 9.16 コンテナーで不完全型のサポート
- 9.17 emplaceの戻り値
- 9.18 mapとunordered_mapの変更
- 9.19 連想コンテナーへのsplice操作
- 9.20 コンテナーアクセス関数
- 9.21 clamp
- 9.22 3次元hypot
- 9.23 atomic<T>::is_always_lock_free
- 9.24 scoped_lock : 可変長引数lock_guard
- 9.25 std::byte
- 9.26 最大公約数(gcd)と最小公倍数(lcm)
第10章 ファイルシステム
- 10.1 名前空間
- 10.2 POSIX準拠
- 10.3 ファイルシステムの全体像
- 10.4 エラー処理
- 10.5 path : ファイルパス文字列クラス
- 10.6 file_status
- 10.7 directory_entry
- 10.8 directory_iterator
- 10.9 recursive_directory_iterator
- 10.10 ファイルシステム操作関数