最新のC++を基礎から学べる入門書。C++は多くの業界で使われてきましたが、何度かの大きな改訂を経て、飛躍的に進化してきました。本書では、最新の規格であるC++23に完全に準拠し、次の規格であるC++26にも触れながら、他書ではあまり解説されていないC++の新機能について詳しく説明します。プログラムを実際に作成しながら、基礎から応用まで学べるので、基本的な構文だけでなく、C++での開発やテストの手法も身につきます。他言語の経験はあるがC++は初めてというプログラマーや、進化したC++の機能を学びたい人におすすめです。
入門 モダンC++
―最新の言語標準への招待
Frances Buontempo 著、鍋島 崇宏 監訳、原 隆文 訳
- TOPICS
- C/C++
- 発行年月日
- 2026年11月30日
- PRINT LENGTH
- 432
- ISBN
- 978-4-8144-0181-9
- 原書
- Introducing C++
- FORMAT
関連ファイル
目次
賞賛の声
序文
監訳者まえがき
まえがき
1章 Hello, World!
1.1 ツールのインストール
1.1.1 LinuxとmacOS
1.1.2 Windows
1.2 ツールの使用
1.2.1 GCC
1.2.2 Clang
1.2.3 Windows
1.3 プログラムの実行
1.4 画面への出力
1.4.1 printlnの使用
1.4.2 トラブルシューティング
1.4.3 coutの使用
1.5 printlnとcoutについての詳細な理解
1.6 まとめ
2章 変数とキーボード入力
2.1 変数の宣言
2.2 文字入力
2.3 入力に関する問題の検出
2.3.1 実数の入力
2.3.2 数値の問題の検出
2.3.3 より一般的な問題の検出
2.4 入力処理とテストのための関数
2.4.1 失敗するテストから始める
2.4.2 コードを複数の関数に分割する
2.4.3 再び、失敗するテストから始める
2.4.4 不正な入力のテスト
2.4.5 リファクタリング
2.4.6 mainから新しい関数を呼び出す
2.5 変数、std::cin、関数についての詳細な理解
2.5.1 入力エラーのクリア
2.5.2 関数についてさらに
2.6 まとめ
3章 例外とstd::expected
3.1 例外
3.1.1 例外のスロー
3.1.2 tryとcatch
3.1.3 try/catchブロックによる例外処理
3.2 std::expected
3.3 例外とstd::expectedについての詳細な理解
3.3.1 その他の例外クラス
3.3.2 catchブロックの場所
3.3.3 値のないstd::expected
3.4 まとめ
4章 ループとコンテナークラス
4.1 ループを使って複数の数値を入力する
4.1.1 while文
4.2 std::arrayの使用
4.2.1 数値の表示と使用
4.3 std::vectorの使用
4.3.1 std::vectorへの要素の追加
4.3.2 コンテナークラスのその他の関数
4.3.3 複数の数値をstd::vectorに取得する
4.4 順序付きコンテナークラスについての詳細な理解
4.4.1 初期化子リストによるコンテナークラスの初期化
4.4.2 std::vectorに要素を追加すると何が起こるか
4.4.3 std::vectorから削除すると何が起こるか
4.4.4 固定値によるstd::vectorの初期化
4.4.5 その他の順序付きコンテナークラス
4.5 まとめ
5章 <algorithm>の利用
5.1 複数の数値をstd::vectorに取得する(再び)
5.2 <algorithm>を使って数値を分析する
5.2.1 <algorithm>での述語の使用
5.2.2 <algorithm>におけるイテレーターの使用
5.2.3 要素を削除する従来の方法
5.2.4 <algorithm>による平均値の算出
5.3 <algorithm>についての詳細な理解
5.3.1 for文の使用
5.3.2 二項演算子と二項述語
5.3.3 イテレーターについてさらに
5.4 まとめ
6章 ラムダ式とstd::ranges
6.1 ラムダ式を使って負の数値を削除する
6.1.1 ラムダ式を使って動作を変更する
6.2 <ranges>のstd::viewsを使って負の数値を除外する
6.3 ラムダ式のキャプチャを使用する
6.4 ラムダ式とstd::viewsについての詳細な理解
6.4.1 値渡しによるラムダ式のキャプチャ
6.4.2 参照渡しによるラムダ式のキャプチャ
6.4.3 std::viewsの結果を組み合わせる
6.4.4 遅延評価
6.5 まとめ
7章 乱数
7.1 乱数の生成
7.2 関数のオーバーロードを記述する
7.3 取引ゲームの作成
7.4 乱数(およびstd::vector)を使ったコードの詳細な理解
7.4.1 正規分布の使用
7.4.2 乱数を使用するコードに関する考慮事項
7.4.3 std::vectorの作成と要素の追加
7.5 まとめ
8章 ファイルの操作
8.1 ファイルへの書き込み
8.1.1 問題の検出と報告
8.1.2 <filesystem>の使用
8.2 ファイルからの読み取り
8.3 ファイルについての詳細な理解
8.3.1 さまざまなファイルモード
8.3.2 ビット演算子とビットマスク
8.3.3 以前の価格の読み取り
8.4 まとめ
9章 文字列とフォーマット
9.1 Cスタイルの文字列リテラルと文字
9.1.1 main関数にコマンドライン引数を渡す
9.2 std::stringの作成と操作
9.2.1 std::stringを作成するその他の方法
9.2.2 std::stringのその他の関数
9.2.3 std::string_view
9.3 std::printlnでのフォーマットとその他の機能
9.4 std::formatとフォーマット指定
9.5 取引ゲームの改良
9.6 文字列についての詳細な理解
9.6.1 std::stringを効率よく連結する
9.6.2 std::printlnを使ってファイルに保存する
9.7 まとめ
10章 クラス:メンバー変数とメンバー関数
10.1 単純なクラス
10.2 privateとpublicのアクセス指定子
10.3 コンストラクターとデストラクター
10.4 std::vectorでStockクラスを使う
10.5 クラスについての詳細な紹介
10.5.1 コンストラクターとデストラクターについての詳細
10.5.2 ヘッダーファイルとソースファイルにクラスを分割する
10.6 まとめ
11章 クラス:特殊メンバー関数とムーブセマンティクス
11.1 オブジェクトのコピー
11.2 オブジェクトのムーブ
11.3 ムーブ代入とコピー代入
11.4 コピーとムーブについての詳細
11.4.1 std::stringはどのように動作するか
11.4.2 ムーブコンストラクターとムーブ代入
11.4.3 コピーコンストラクターとコピー代入
11.5 まとめ
12章 std::unique_ptrによるメモリ管理
12.1 std::unique_ptrの作成
12.2 std::unique_ptrの使用
12.3 スマートポインターについての詳細
12.3.1 ポインターと参照についてさらに
12.3.2 std::unique_ptrの詳細
12.3.3 その他のスマートポインター
12.3.4 カスタムデリーター
12.3.5 クラスでのstd::unique_ptrの使用
12.3.6 Exchangeクラスの使用
12.4 まとめ
13章 クラス:仮想関数と継承
13.1 基底クラスと派生クラス
13.1.1 抽象基底クラスを定義する
13.1.2 派生クラス
13.2 派生クラスの使用
13.3 新しい取引ゲーム
13.4 別の派生型を追加する
13.5 仮想関数と継承についての詳細
13.5.1 仮想デストラクター
13.5.2 仮想関数とスライシング
13.6 まとめ
14章 std::variantとstd::visitの使用
14.1 std::variantの作成と使用
14.2 std::visitにおけるstd::variantの使用
14.3 取引ゲームでのEventの使用
14.4 std::variantについての詳細
14.4.1 std::variantの潜在的な問題の発見と対処
14.4.2 std::optionalとstd::anyの使用
14.5 まとめ
15章 テンプレートとstd::unordered_map
15.1 ルックアップテーブルの作成
15.2 独自のテンプレートを記述する
15.2.1 std::hashの特殊化
15.2.2 Eventの等価演算子の追加
15.2.3 イベントの表示方法の追加
15.3 取引ゲームにおけるイベントの集計
15.4 連想配列とテンプレートについての詳細
15.5 テンプレートについてさらに
15.6 まとめ
付録A 黒魔術への招待
A.1 テンプレートメタプログラミング
A.1.1 非型テンプレートパラメーターとコンパイル時定数
A.1.2 非型テンプレートパラメーターを用いた分岐
A.1.3 エイリアステンプレートの宣言
A.1.4 テンプレートの部分特殊化
A.1.5 変数テンプレート
A.1.6 クラステンプレートを組み合わせる
A.1.7 型のエイリアスをあえて無効化するクラステンプレート
A.1.8 テンプレートパラメーターに制約をつける
A.2 コンセプトという白魔術
索引