C++のconst修飾子

8103 ワード

  • Use const whenever possible.——《Effective C++》
  • const一般変数:
    1 const int bufSize = 512 //      
    
    2 const double pi; //  :        

  • constポインタ:
    1 char greeting[] = "Hello";
    
    2 char* p = greeting;//non-const pointer,non-const data
    
    3 const char* p = greeting;//non-const pointer,const data
    
    4 char* const p = greeting;//const pointer,non-const data
    
    5 const char* const p = greeting;//const pointer,const data

  • const関数パラメータ:
  • はconstポインタ伝達とconst参照伝達に対して、関数内部の伝達データの修正を防止する.const修飾値伝達は意味がありません.
    1 void StringCopy(char *strDestination, const char *strSource); 
    
    2 void Func(const A &a);//  ,A           。

  • 内部データ型以外の入力パラメータについては、効率を向上させるために「値転送」を「const参照転送」に変更する必要があります.例えばvoid Func(A a)をvoid Func(const A&a)に変更する.

  • const関数の戻り値:
  • は、関数パラメータに似ています.

  • constクラスメンバー関数:
  • C++プログラム効率を改善する根本的な方法はconstリファレンス伝達を使用することであるが、この方法は、constメンバー関数処理で取得したconstオブジェクト(修飾されていない)があることを前提として実行可能である.
     1 class A
    
     2 {
    
     3 public:
    
     4     int Get() const    {return m_n;};
    
     5 private:
    
     6     int m_n;
    
     7 };
    
     8 
    
     9 void f(const A& a)
    
    10 {
    
    11     int tmp = a.Get();//Get   const  ,     const    !
    
    12 }

  • データ・メンバーを変更しない関数はconstタイプとして宣言する必要があります.
     1 class Stack 
    
     2 { 
    
     3    public: 
    
     4   void  Push(int elem); 
    
     5   int  Pop(void); 
    
     6   int  GetCount(void)  const; //const      
    
     7    private: 
    
     8   int  m_num; 
    
     9   int  m_data[100]; 
    
    10 }; 
    
    11  
    
    12  int Stack::GetCount(void)  const 
    
    13 { 
    
    14   ++ m_num; //    ,         m_num 
    
    15  Pop();  //    ,      const    
    
    16  return m_num; 
    
    17  } 


  • 参考:『Effective C++』、『高品質C/C++プログラミング』