第5部: C++の言語機能¶
C++の言語機能を「構文」ではなく「仕組みと目的」から説明する章です。各ページに必ず、C#との違い/Unity開発者が誤解しやすい点/ゲーム開発での使用例/メモリ上で起きることを含めています。
コード例は原則 C++20 です(検証環境: MinGW GCC 9.2、C++20部分サポート。concepts/rangesの例は構文レビューのみ — 各ページに明記)。
読む順番(前提の少ない順)¶
- 値型と参照・ポインタ・参照 — 最重要。C#との世界観の違いの核心
- const と const correctness
- 配列と文字列
- 構造体・クラス・アクセス指定子
- コンストラクタ・デストラクタ・コピー・ムーブ(Rule of Zero/Three/Five)
- RAII — C++の設計思想の核
- 継承・仮想関数・抽象クラス・override/final
- 関数オーバーロードと演算子オーバーロード
- テンプレートと concepts
- ラムダ式・関数ポインタ・std::function
- enum・enum class・namespace
- 例外
- auto・decltype・constexpr・consteval
- static・inline・friend
- キャスト
- スマートポインタ
- STLコンテナ・イテレータ・アルゴリズム・ranges
- 未定義動作・実装定義・未規定動作
仕上げに 演習。
C#経験者への注意(この章全体の前提)¶
- C++にはGCがない。誰がいつメモリを解放するか(所有権)を常にコードで表現する
- C++の変数は既定で値(コピーされる実体)。C#のclassのような「参照の共有」はポインタ/参照で明示する
- C++は「間違ったコードはコンパイルエラー」とは限らず、未定義動作として静かに壊れることがある(→ 18)
全体目次 | 次: 値型と参照・ポインタ・参照