
このオープンアクセスコースは、C++ プログラミングの熟練度レベルを目指す、C およびオブジェクト指向プログラミングにすでに精通している人を対象としています。このコースでは、C++ プログラミングの基本をカバーし、高度な C++ セマンティクスと概念に進みます。
主な特徴:
コースを楽しんでいただけた場合、または役立つと思われた場合は、スターを追加してください
| # | タイトル | 主な焦点 |
|---|---|---|
| 1 | はじめに(html) | C/C++の歴史、応用分野、コース紹介 |
| 2 | 準備(html) | 書籍、コンパイル方法、Hello world |
| 3 | 基本概念 I (html) | 型システム、基本型、および演算子 |
| 4 | 基本概念 II (html) | 整数および浮動小数点型とその算術演算 |
| 5 | 基本概念Ⅲ (html) | エンティティ、列挙子、構造体、制御フロー ステートメント |
| 6 | 基本概念 IV (html) | ヒープ、スタック、ポインタ、参照、Const プロパティ、変換演算子 |
| 7 | 基本概念 V (html) | 関数、ラムダ式、前処理ディレクティブ |
| 8 | オブジェクト指向プログラミング I (html) | クラス階層、コンストラクター、デストラクター、クラスのキーワード |
| 9 | オブジェクト指向プログラミング II (html) | ポリモーフィズム、演算子のオーバーロード |
| 10 | テンプレートとメタプログラミング I (html) | 関数テンプレート、型特性、コンパイル時ユーティリティ |
| 11 | テンプレートとメタプログラミング II (html) | クラステンプレート、SFINAE |
| 12 | 翻訳単位 I (html) | リンケージと 1 つの定義ルール |
| 13 | 翻訳単位 II (html) | 複数の翻訳単位とファイルの処理、 #include 、モジュール |
| 14 | コード規約 I (html) | プロジェクトの構成、コード規約の概要、エンティティ規約 |
| 15 | コード規約 II (html) | テンプレート、名前空間、最新の C++、保守性、命名規則、および書式設定規則 |
| 16 | デバッグとテスト(html) | 実行/メモリのデバッグ、サニタイザー、ハーディング手法、単体テスト、テスト駆動開発 |
| 17 | エコシステム(html) | Cmake、ドキュメント作成、およびその他のツール |
| 18 | ユーティリティ(html) | 主なstdライブラリ |
| 19 | コンテナ、イテレータ、およびアルゴリズム(html) | コンテナ、イテレータ、アルゴリズム、範囲 |
| 20 | 高度なトピック I (html) | 移動セマンティクス、ユニバーサル参照、型推論 |
| 21 | 高度なトピック II (html) | エラー処理、C++ イディオム、スマート ポインター |
| 22 | パフォーマンスの最適化 I (html) | アームダルの法則、パフォーマンス限界、アーキテクチャ概念 (ILP、SIMD など)、メモリ階層 |
| 23 | パフォーマンスの最適化 II (html) | 算術最適化、メモリ最適化など。 |
| 24 | パフォーマンスの最適化 III (html) | コンパイラの最適化、プロファイリング、ベンチマーク ツール |
| 25 | ソフトウェア設計I (html) | 基本概念、原則、使用例 |
| 26 | ソフトウェア設計 II (html) | デザインパターンとイディオム |
オールインワンブック: modern-cpp.pdf (数コミット遅れている可能性があります)、html
1. はじめに
2. 準備
3. 基本概念 I - 型システム、基本型、および演算子
void型、 nullptrautoキーワード<=> 、安全な比較演算子4. 基本概念 II - 整数型と浮動小数点型
size_t 、 ptrdiff_t 、 uintptr_t 、算術演算セマンティクス、プロモーション、切り捨て、未定義の動作、飽和算術NaN )、マシン イプシロン、最終位の単位 (ULP)、チートシート、制限と便利な関数、算術プロパティ、特殊値の動作、未定義の動作、浮動小数点エラーの検出5. 基本概念 III - エンティティと制御フロー
struct 、ビットフィールド、 unionifステートメント、 forおよびwhileループ、範囲ベースのforループ、 switch 、 goto 、未使用変数の回避警告using 、 using namespace 、 inline名前空間[[nodiscard]] 、 [[maybe_unused]] 、 [[deprecated]] 、 [[noreturn]]6. 基本概念 IV - メモリの概念
& 、 structメンバ アクセス、 voidポインタ、ポインタ変換、ポインタ算術演算、ワイルド ポインタおよびダングリング ポインタnew 、 delete 、非割り当て配置割り当て、非スロー割り当て、メモリリークConstと定数式: 定数とリテラル、 const 、 constexpr 、 consteval 、 constinit 、 if constexpr 、 std::is constant evaluated() 、 if constevalvolatileキーワードstatic_cast 、 const_cast 、 reinterpret_cast 、型パニング、 std::bit_cast 、均一初期化変換、 gls::narrow_castsizeof演算子: 概要、 [[no_unique_address]]7. 基本概念 V - 関数と前処理
=delete 、デフォルト パラメーターconstexpr/consteval 、 template 、 mutable 、 [[nodiscard]] 、キャプチャ リストとクラス# )、 #errorおよび#warning 、 #pragma 、トークン貼り付け演算子## 、可変個引数マクロ8. オブジェクト指向プログラミング I - クラスの概念
public/protected/private使用する場合?explicitキーワード、 [[nodiscard]]およびクラス= default )this 、 static 、 const 、 mutable 、 using 、 friend 、 delete9. オブジェクト指向プログラミング II - ポリモーフィズムと演算子のオーバーロード
virtualメソッド、仮想テーブル、 overrideキーワード、 finalキーワード、一般的なエラー、純粋な仮想メソッド、抽象クラスとインターフェイス< 、宇宙船演算子<=> 、添字演算子[] 、多次元添字演算子[] 、関数呼び出し演算子() 、静的演算子[]および演算子() 、変換演算子T() 、戻り型のオーバーロード解像度、インクリメント演算子およびデクリメント演算子++ / -- 、代入演算子= 、ストリーム演算子<< 、演算子のメモ10. テンプレートとメタプログラミング I - 関数テンプレートとコンパイル時ユーティリティ
autoプレースホルダ、クラステンプレートパラメータタイプ、配列およびポインタタイプ、関数タイプstatic_assert 、 usingキーワード、 decltypeキーワード11. テンプレートとメタプログラミング II - クラス テンプレートと SFINAE
typenameとtemplateキーワード、クラス テンプレートの階層とusing 、 friendキーワード、テンプレート テンプレートの引数conceptキーワード、 requires句、 requires式、 requires式 + 句、 requires句 + 式、 requiresとconstexpr 、ネストされたrequires12. 翻訳単位 I - リンケージと 1 つの定義ルール
staticキーワード、匿名名前空間、 externキーワードconstとconstexprのリンケージ: 静的初期化順序の大失敗inline関数/変数、 constexprおよびinlineexternキーワードexternキーワード13. 翻訳単位 II - インクルード、モジュール、名前空間
#include問題: インクルード ガード、前方宣言、循環依存関係、一般的なリンク エラー14. コード規約 I
#include : #includeガード、 #include構文、 #includeの順序、一般的なヘッダー/ソース ファイル名の規則staticグローバル変数、変換struct vs class 、初期化、括弧付き初期化子リスト、特別なメンバー関数、 =default 、 =delete 、その他の問題、継承、スタイル15. コード規約 II
autoif/else 、比較、 switch 、 for/whileusing namespace 、匿名/名前のない名前空間、名前空間とクラスの設計、スタイル16. デバッグとテスト
std::breakpointvalgrindclang-tidy17. エコシステム - Cmake およびその他のツール
cmakeとctestdoxygenclang-format 、 Compiler Explorer 、コード変換 - CppInsights 、AI によるコード補完 - ローカル コード検索 - ugrep 、 ripgrep 、 hypergrep 、コード検索エンジン - searchcode/grep.app 、コード ベンチマーク - Quick-Bench 、コーディング用フォント18. 公共事業
ofstream/ifstreamstd::string 、数値間の変換、 std::string_view 、 std::format 、 std::printstd::span<random> 、シード、PRNG 期間と品質、配布、最近のアルゴリズムとパフォーマンス、準ランダムstd::pair 、 std::tuple 、 std::variant 、 std::optional 、 std::any 、 std::stacktrace19. コンテナ、イテレータ、アルゴリズム
std::array 、 std::vector 、 std::deque 、 std::list 、 std::forward_liststd::set 、 std::map 、 std::multisetstd::stack 、 std::queue 、 std::priority_queuestd::advance 、 std::next 、 std::prev 、 std::distance 、コンテナ アクセス メソッド、イテレータの特性std::find_if 、 std::sort 、 std::accumulate 、 std::generate 、 std::remove_if20. 高度なトピック I
lvaluesおよびrvalues参照、移動セマンティック、 std::move 、クラス宣言セマンティック& 、 && Ref 修飾子とvolatileオーバーロードauto控除、 auto(x) : 減衰コピーconst正しさ21. 高度なトピック II
noexceptキーワード、メモリ割り当ての問題、リターン コードと例外の概要、 std::expected 、代替エラー処理アプローチstd::unique_ptr 、 std::shared_ptr 、 std::weak_ptr22. 最適化 I - 基本概念
23. 最適化 II - コードの最適化
printf 、メモリ マップド I/O、生データのロードの高速化[[likely]] / [[unlikely]] 、符号付き/符号なし整数、ループ、ループ巻き上げ、ループ展開、アサーション、コンパイラ ヒント[[assume]]/std::unreacheable() 、再帰24. 最適化 III - コーディング以外の最適化とベンチマーク
gprof 、 uftrace 、 callgrind 、 cachegrind 、 perf Linux プロファイラー25. ソフトウェア設計 I - 基本概念 (草案)
26. ソフトウェア設計 II - 設計パターンとイディオム (草案)
タイプミス、概念的なエラー、または改善すべきセクションを見つけた場合は、 issueパネルを使用して報告してください。
Federico Busato 、https://federico-busato.github.io/