--- name: cpp-coding-standards description: C++コアガイドラインに基づくC++コーディング標準(isocpp.github.io)。現代的で安全で慣用的なプラクティスを強制するためにC++コードを書き、レビュー、またはリファクタリングする場合に使用します。 origin: ECC --- # C++コーディング標準(C++コアガイドライン) C++コアガイドラインから派生した最新のC++(C++17/20/23)の包括的なコーディング標準。タイプセーフティ、リソースセーフティ、不変性、明確性を強制します。 ## 使用時期 - 新しいC++コードを書く(クラス、関数、テンプレート) - 既存のC++コードをレビューまたはリファクタリング - C++プロジェクトでアーキテクチャ決定を行う - C++コードベース全体で一貫性のあるスタイルを実施 - 言語機能の選択(例:`enum` vs `enum class`、生ポインタ対スマートポインタ) ## クロスカッティング原則 これらのテーマはガイドライン全体に繰り返され、基礎を形成: 1. **至るところにRAII**:リソースライフタイムをオブジェクトライフタイムにバインド 2. **デフォルトで不変性**:`const`/`constexpr`で開始;変更可能性は例外 3. **タイプセーフティ**:型システムを使用してコンパイル時にエラーを防止 4. **意図を表現**:名前、タイプ、概念は目的を伝える必要があります 5. **複雑性を最小化**:シンプルなコードが正しいコード 6. **値セマンティクス対ポインタセマンティクス**:値で返すか、スコープ付きオブジェクトを好む ## 主要なルール | Rule | Summary | |------|---------| | **P.1** | コード内のアイデアを直接表現 | | **P.3** | 意図を表現 | | **P.4** | 理想的には、プログラムは静的にタイプセーフである必要があります | | **P.5** | ランタイムチェックに対するコンパイル時チェック | | **P.8** | リソースをリークしない | | **P.10** | 変更可能なデータより不変データを好む | | **I.1** | インターフェースを明示的にする | | **I.2** | 非const グローバル変数を避ける | | **I.4** | インターフェースを正確にし、強く型付けされたものにする | ## スマートポインタと所有権 現代的なC++では、生ポインタの代わりにスマートポインタを使用: - `std::unique_ptr` 単一所有者向け - `std::shared_ptr` 共有所有権向け - `std::weak_ptr` 循環参照を回避するため