Effective C++まとめ

2050 ワード

Rule 3:できるだけconstを使う
  • constは、内部に作用するオブジェクト、関数パラメータ、関数戻り値、メンバー関数体
  • に作用する.
  • はconstを使用して関数リロード
  • を行うことができる.
  • 「メンバー関数はconst」の2つの観点:bitwise constnessとlogical constness
  • bitwise constness:constメンバー関数がメンバー変数(staticを除く)を変更しない場合にconstと言えます.C++の「定数」の定義はこのようになります.(ただし、クラスにポインタメンバー変数がある場合を考えると、char*textは、メンバー関数がポインタ自体の値を変更していない可能性があるが、ポインタが内容を指すのは意外に変更される可能性があり、詳細は本の例を参照)
  • logical constness:constメンバー関数はオブジェクトのメンバー変数を変更できますが、クライアントに
  • を検出させることはできません.
  • mutable(可変)は、non-staticメンバー変数のbitwise constness制約を解放し、constメンバー関数で変更できるようにすることができる.
  • constとnon-constメンバー関数では重複を回避(コード重複などの問題を回避)し、constとnon-constメンバー関数が実質的に等価な実装がある場合、non-constバージョンにconstバージョンを呼び出すことでコード重複を回避することができる.
    Rule 4:オブジェクトが使用される前に初期化されていることを確認する
  • 初期化と付与の違いに注意!コンストラクション関数の関数体の前に位置する部分を初期化します.コンストラクション関数の初期化リスト(ここでは初期化)と呼ばれます.コンストラクション関数の関数体には「=」が割り当てられています.初期化リストの方が効率的です.
  • c++は、「異なるコンパイルユニット内に定義されたnon-local staticオブジェクト」の初期化順序を明確に定義していない.non-local staticオブジェクトの代わりにlocal staticオブジェクトを使用します.
  • 内蔵タイプのオブジェクトは、c++が初期化を保証しないため、手動で初期化します.
  • コンストラクション関数は、コンストラクション関数の内部で付与操作(assignment)を使用しないでメンバー初期化リストを使用することが望ましい.初期化リストのメンバーの順序はclassで宣言された順序と一致しなければならない(良い習慣).
  • copy constructor:構造関数をコピーします.次の3つの場合に呼び出されます:1.1つのオブジェクトが関数体2に値伝達される.1つのオブジェクトは、関数から3を値で返す.1つのオブジェクトを別のオブジェクトで初期化する必要があります.A aa(a); またはA aa=a;コピーコンストラクション関数が呼び出されます.注意A aa=a;copy assignment(operator=)を呼び出すのではなく、これは定義であり、割り当てではないためです.でもA aaなら;aa=a;,2番目の文はoperator=を呼び出します.ここでは割り当て値です.
  • //Singleton          
    static CApplication & Instance()
    {
        // local static,           。         。       。
        static CApplication appliction; 
        return application;//  local static   
    }

    Rule 30: Understand “inline”
  • inlineはコンパイラに対する申請であり、強制命令ではない.それは表示されて提案されてもよい(inlineキーワードを用いて)、隠喩的に提案されてもよい(関数定義をclass内に書く).