このオープンアクセスコースは、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
型、 nullptr
auto
キーワード<=>
、安全な比較演算子4. 基本概念 II - 整数型と浮動小数点型
size_t
、 ptrdiff_t
、 uintptr_t
、算術演算セマンティクス、プロモーション、切り捨て、未定義の動作、飽和算術NaN
)、マシン イプシロン、最終位の単位 (ULP)、チートシート、制限と便利な関数、算術プロパティ、特殊値の動作、未定義の動作、浮動小数点エラーの検出5. 基本概念 III - エンティティと制御フロー
struct
、ビットフィールド、 union
if
ステートメント、 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 consteval
volatile
キーワードstatic_cast
、 const_cast
、 reinterpret_cast
、型パニング、 std::bit_cast
、均一初期化変換、 gls::narrow_cast
sizeof
演算子: 概要、 [[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
、 delete
9. オブジェクト指向プログラミング 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
、ネストされたrequires
12. 翻訳単位 I - リンケージと 1 つの定義ルール
static
キーワード、匿名名前空間、 extern
キーワードconst
とconstexpr
のリンケージ: 静的初期化順序の大失敗inline
関数/変数、 constexpr
およびinline
extern
キーワードextern
キーワード13. 翻訳単位 II - インクルード、モジュール、名前空間
#include
問題: インクルード ガード、前方宣言、循環依存関係、一般的なリンク エラー14. コード規約 I
#include
: #include
ガード、 #include
構文、 #include
の順序、一般的なヘッダー/ソース ファイル名の規則static
グローバル変数、変換struct
vs class
、初期化、括弧付き初期化子リスト、特別なメンバー関数、 =default
、 =delete
、その他の問題、継承、スタイル15. コード規約 II
auto
if/else
、比較、 switch
、 for/while
using namespace
、匿名/名前のない名前空間、名前空間とクラスの設計、スタイル16. デバッグとテスト
std::breakpoint
valgrind
clang-tidy
17. エコシステム - Cmake およびその他のツール
cmake
とctest
doxygen
clang-format
、 Compiler Explorer
、コード変換 - CppInsights
、AI によるコード補完 - ローカル コード検索 - ugrep
、 ripgrep
、 hypergrep
、コード検索エンジン - searchcode/grep.app
、コード ベンチマーク - Quick-Bench
、コーディング用フォント18. 公共事業
ofstream/ifstream
std::string
、数値間の変換、 std::string_view
、 std::format
、 std::print
std::span
<random>
、シード、PRNG 期間と品質、配布、最近のアルゴリズムとパフォーマンス、準ランダムstd::pair
、 std::tuple
、 std::variant
、 std::optional
、 std::any
、 std::stacktrace
19. コンテナ、イテレータ、アルゴリズム
std::array
、 std::vector
、 std::deque
、 std::list
、 std::forward_list
std::set
、 std::map
、 std::multiset
std::stack
、 std::queue
、 std::priority_queue
std::advance
、 std::next
、 std::prev
、 std::distance
、コンテナ アクセス メソッド、イテレータの特性std::find_if
、 std::sort
、 std::accumulate
、 std::generate
、 std::remove_if
20. 高度なトピック I
lvalues
およびrvalues
参照、移動セマンティック、 std::move
、クラス宣言セマンティック&
、 &&
Ref 修飾子とvolatile
オーバーロードauto
控除、 auto(x)
: 減衰コピーconst
正しさ21. 高度なトピック II
noexcept
キーワード、メモリ割り当ての問題、リターン コードと例外の概要、 std::expected
、代替エラー処理アプローチstd::unique_ptr
、 std::shared_ptr
、 std::weak_ptr
22. 最適化 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/