Bo2SS

Bo2SS

Effective C++の読書共有

条項 1:C++ を言語連邦として見る#

手続き、オブジェクト、テンプレート、関数の 4 つのプログラミングパラダイムに加えて、メタプログラミングの形式があり、これはジェネリックプログラミング、すなわちテンプレートに含まれます;STL はメタプログラミングの一例です

  • C++ を学ぶ方法を体験する

条項 2:可能な限り const/enum/inline で #define を置き換える#

#define を使わない方が良い、デバッグを容易にするため;define を使うとエラーを隠す可能性があるため、すべてのマクロはコンパイラには見えません

  1. 単純な定数には、const オブジェクトまたは enum を使用するのが最良です
  2. 関数のようなマクロには、inline 関数を使用するのが最良です

条項 3:可能な限り const を使用する#

データの意味での const VS. 論理的な意味での const

  • コンパイラは前者を強制的に実施し、私たちはプログラムを書く際に後者を使用します
  • 前者:真のデータの意味での const は実現が難しく、ポインタに関わり、他の方法でデータを変更する可能性があります
  • 後者:コアデータが変わらなければ、論理的な意味での const と見なすことができます

PS:const オブジェクトとメソッド

image-20210707184228548
  • const オブジェクト:非 const メソッドを呼び出すことはできません、なぜなら非 const メソッド内の変数が変更される可能性があるからです
  • const メソッド
    • 内部でメンバー属性を変更することはできません
    • mutable 変数:論理的な const、変数は変更可能ですが、コアデータではありません

条項 4:オブジェクトが使用される前に初期化されていることを確認する#

1、組み込み型オブジェクトを手動で初期化する

  • C++ は組み込み型オブジェクトが初期化されることを保証しません

2、コンストラクタの代入には初期化リストを使用するのが最良です

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

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。