コンテンツにスキップ

第5部: C++の言語機能

C++の言語機能を「構文」ではなく「仕組みと目的」から説明する章です。各ページに必ず、C#との違い/Unity開発者が誤解しやすい点/ゲーム開発での使用例/メモリ上で起きることを含めています。

コード例は原則 C++20 です(検証環境: MinGW GCC 9.2、C++20部分サポート。concepts/rangesの例は構文レビューのみ — 各ページに明記)。

読む順番(前提の少ない順)

  1. 値型と参照・ポインタ・参照最重要。C#との世界観の違いの核心
  2. const と const correctness
  3. 配列と文字列
  4. 構造体・クラス・アクセス指定子
  5. コンストラクタ・デストラクタ・コピー・ムーブ(Rule of Zero/Three/Five)
  6. RAIIC++の設計思想の核
  7. 継承・仮想関数・抽象クラス・override/final
  8. 関数オーバーロードと演算子オーバーロード
  9. テンプレートと concepts
  10. ラムダ式・関数ポインタ・std::function
  11. enum・enum class・namespace
  12. 例外
  13. auto・decltype・constexpr・consteval
  14. static・inline・friend
  15. キャスト
  16. スマートポインタ
  17. STLコンテナ・イテレータ・アルゴリズム・ranges
  18. 未定義動作・実装定義・未規定動作

仕上げに 演習

C#経験者への注意(この章全体の前提)

  • C++にはGCがない。誰がいつメモリを解放するか(所有権)を常にコードで表現する
  • C++の変数は既定で(コピーされる実体)。C#のclassのような「参照の共有」はポインタ/参照で明示する
  • C++は「間違ったコードはコンパイルエラー」とは限らず、未定義動作として静かに壊れることがある(→ 18)

全体目次 | 次: 値型と参照・ポインタ・参照