constキーワードの使い方のまとめ

3096 ワード

constはプログラミング中にできるだけ多く使用すべきキーワードで、可変オブジェクトを指定し、コンパイラはこの制約を強行し、コードの堅牢性を強化します.constは変数、パラメータを修飾するために使用することができ、関数の戻り値、関数自体は多才と言える.
1.const修飾変数
  • Effective  C++条項2では,#define宣言のマクロ定義定数をできるだけconst宣言定数を用いて置き換える.(inline置換#defineの関数)
    #define pi 3.1415926
    const double pi = 3.1415926
    
  • const修飾ポインタ
    char s[] = "hitsz"
    char* p = s;
    const char* p  = s; //p    ,       
    char* const p =s;   //p     ,      
    const char* const p = s;//       
    
  • const修飾反復器
    vectorvec;
    const vector::iterator it = vec.begin();   //    T* const,      
    *it = 100;
    it++;  //error!!!it  const
    vector::const_iterator it = vec.begin();   //   const T*
    *it = 100;    //error!!!      
    it++;
  • 2.修飾関数パラメータ
    constを使用して関数パラメータを修飾すると、このパラメータが関数で予期せぬ変更を受けないように保護されます.たとえば、文字列のコピー時に元の文字列を変更することは望ましくありません.
    void stringcp(char* strdes, const char* strsource)

     3.修飾関数の戻り値
    constは、返されるポインタまたは参照を修飾し、ポインタが指すコンテンツまたは参照の内容が変更されないことを保護し、演算子の再ロードにもよく使用されます.結局、関数呼び出し式を左値にできないようにすることです.
    #include   
    using namespace std;  
      
    class A {
    private:
    	int i;
        int j;
    public:
    	A(){i=0; j = 10;}
    	int & get_i(){ return i; }
        const int & get_j(){ return j; }
    };
     
    void main(){
    	A a;
    	cout<

    4.const修飾メンバー関数
    データ・メンバーを変更しない関数はconstとして宣言し、関数がデータ・メンバー(mutableメンバー変数を除く)を誤って変更しないようにします.メンバー関数をconstとして宣言するには、次の2つの利点があります.1つ目は、関数をより理解しやすくし、その関数がオブジェクトの内容を変えることができるか、どの関数が変えられないかを簡単に知ることです.第二に、constオブジェクトが非const関数にアクセスできないため、constメンバー関数のみがconstオブジェクトを処理できるようにする.
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    
    using namespace std;
    
    class MyIntArray
    {
        private:
            static const int a = 100;
            int  p[a];
        public:
            MyIntArray()
            {
                for( int i = 0 ; i < a ; i++ )
                {
                    p[i] = i;
                }
            }
            const int & operator [](int n) const
            {
                return p[n];
            }
            int & operator [](int n) 
            {
                return p[n];
            }
    };
    
    int main(int argc, char *argv[])
    {
        MyIntArray array;//     const  
        cout<

    constメンバー関数の注意事項:
    1.constメンバー関数非constメンバー関数を呼び出すことはできません
    2.constメンバー関数参照値を返すと、必ずconst参照になります.
    3.constメンバー関数内でメンバー変数を変更するには、メンバー変数をmutableタイプに設定する必要があります.
    5.const-castの使用
    const_castはC++演算子で、主に複合タイプのconstとvolatile属性を除去するために使用されます(実際に除去されていません).変数自体のconst属性は除去できませんが、変数の値を変更するには、ポインタ(または参照)のconst属性を除去し、間接的に変更するのが一般的です.
    使用法:const_cast(expression)
    const_経由cast演算子は、const type*をtype*に変換し、const type&をtype&に変換することもできます.
    const int a = 3;
    int &r = a; //error  r   const   
    const int& r =a;
    
    int &r = const_cast(a);//        a const    
    r++;