Effective C++ノートを読む(1)

3342 ワード

  • キーワードexplicitは、暗黙的なタイプ変換(implicit type conversation)を完了するために使用できるコンパイラに通知するために使用されます.提案:良い理由がない限り、構造関数をexplicitと明記します.
  • C++は、複数の二次言語からなる言語連邦cスタイルのオブジェクト向けc汎用C++STL-C++の異なる二次言語、特にそれぞれのプログラミング規則であり、伝達パラメータを例にとると、cスタイルのc++を記述すると、伝達参照よりも伝達値が効率的であり、オブジェクト向けcと汎用プログラミングではconst referenceがより安全で信頼性が高く、STL_C++はまた,二次言語自体のプログラム設計パターンと実現方式に関係する伝達値がより高くなる.
  • define(前処理の代わりにコンパイラを用いる)
  • の代わりにenum,inline,constを用いる.
    //the enum hack:
         class myClass{
        privat:
            enum {Turns = 6};
            int array[Turns];
        };
  • はできるだけconstを使用して、設計の需要に違反しない限りconstメンバー関数に対して、constはこの関数が“constオブジェクトを操作することができます”!!!c++ではconst定数の異なる2つの関数がリロードを完了できます!!!
  • const char print( const myString cstr) const
        {
            return cstr[0];
        }
  • mutable解除constの制限
  • //        ,  const    const       :
    //   const         cosnt  
    class TextBlock
    {
    public:
        // --- constructor 
        // -- deconstructor
        const char& operator[](std::size_t pos) const // const version
        {
            // -- operation is omitted
        }
        char& operator[](std::size_t pos ) // non-const version
        {
            return   // call const function & return the result 
                const_cast<char&>(
                static_cast<const TextBlock&>(*this)[position]
            );
            // please pay attention to the type conversion!!!
        }
    };
  • は、オブジェクトが使用される前に初期化されたと判断します.メンバーのない組み込みタイプについては、宣言時に手動で初期化を完了します.カスタムクラスタイプについては、初期化リスト(member initialization lists)を使用して初期化します.コンストラクション関数が各メンバー変数を初期化していることを確認します(パラメータのないdefaultコンストラクション関数でも、オブジェクトの初期化リストを使用できます)->参照タイプ、constタイプの初期化問題を解決します!!!単一例モード(singleton pattern)の設計方法を用いてnon-local staticインスタンスの初期化問題
  • を解決した.
    myClass::myClass
        :theName(),theAdreee(),theNum()
        {};

    6.
    2016.10.21続行