条項 1:C++ を言語連邦として見る#
手続き、オブジェクト、テンプレート、関数の 4 つのプログラミングパラダイムに加えて、メタプログラミングの形式があり、これはジェネリックプログラミング、すなわちテンプレートに含まれます;STL はメタプログラミングの一例です
- C++ を学ぶ方法を体験する
条項 2:可能な限り const/enum/inline で #define を置き換える#
#define を使わない方が良い、デバッグを容易にするため;define を使うとエラーを隠す可能性があるため、すべてのマクロはコンパイラには見えません
- 単純な定数には、const オブジェクトまたは enum を使用するのが最良です
- 関数のようなマクロには、inline 関数を使用するのが最良です
条項 3:可能な限り const を使用する#
データの意味での const VS. 論理的な意味での const
- コンパイラは前者を強制的に実施し、私たちはプログラムを書く際に後者を使用します
- 前者:真のデータの意味での const は実現が難しく、ポインタに関わり、他の方法でデータを変更する可能性があります
- 後者:コアデータが変わらなければ、論理的な意味での const と見なすことができます
PS:const オブジェクトとメソッド

- const オブジェクト:非 const メソッドを呼び出すことはできません、なぜなら非 const メソッド内の変数が変更される可能性があるからです
- const メソッド
- 内部でメンバー属性を変更することはできません
- mutable 変数:論理的な const、変数は変更可能ですが、コアデータではありません
条項 4:オブジェクトが使用される前に初期化されていることを確認する#
1、組み込み型オブジェクトを手動で初期化する
- C++ は組み込み型オブジェクトが初期化されることを保証しません
2、コンストラクタの代入には初期化リストを使用するのが最良です

- 初期化リストはコンストラクタを呼び出します
- コンストラクタと代入演算子は C++ では完全に異なる概念です
- コンストラクタは主にオブジェクトの初期化を担当します
- 初期化リスト(初期値リスト)に列挙されたメンバーの順序は、クラス内で宣言された順序と一致するべきです
- 見た目の順序が実際の順序であり、メンテナンスが容易です
- たとえ逆に書いても、プログラムは宣言順に変数を初期化します
- 「クロスコンパイルユニットの初期化順序」問題を減らすために、non-local static オブジェクトを local static オブジェクトに置き換えます
- できるだけファイル間の初期化依存関係を減らします