C/C++——const用法完全総括

2355 ワード

いつもconst修飾子の使い方をまとめていないので、いつもconstの使い方が多すぎて、覚えなければならないことが多すぎて、すべての状況を把握できないので、いつもやめてしまいます.しかしconstの使い方を徹底的に身につけていないと、心の中ではいつも知識が足りないと感じて、まだ多くの知識点が身につけていないと感じています.自分が本当にまとめたら、実はこれだけの使い方しかありません.
const修飾データメンバー、メンバー関数、クラスオブジェクト.
  • const修飾データメンバー
  • データ変数を修飾し、データ変数が定義されたときにのみ初期化され、プログラムの実行中に再付与されないことを保証します.
    1、修飾クラスのデータメンバー変数は、宣言時に直接初期化できる(const int num=100;)ただし、コンストラクション関数の初期化リストで初期化することが望ましい(初期化リストで初期化する必要がある).
    class A
    {
    public:
             A(int val):num(val){ }
    private:
             const int num;//const    
    };
    

    2、プログラムでconst変数を定義することもできます.const int num = 100;//たとえば、グローバルconst変数num=100を定義します.
    3、const int num = 100;int const num=100に等しい.
    つまりconst intとint constは同じ意味です.
  • const修飾メンバー関数
  • 1、const修飾メンバー関数の戻りタイプ
    class A
    {
    public:
             A(int val):num(val){ }
             const void fun(int val){
                 cout << "num = " << num << endl;
                 age = val;
             }
    private:
             const int num;//const    
             int age;
    };
    

    この場合constの位置には次の2つの等価な場合があります.
    const void
    fun
    ();
    void const
    fun
    ();
    2、const修飾メンバー関数のパラメータ変数
    この場合constの位置には次の2つの等価な場合があります.
    void fun(const int val);
    void fun(int const val);
    3、const直接修飾メンバー関数
    constは、関数宣言の後、関数が実装される前に配置されます.
    void fun(int val)const;
    constは、オブジェクトのデータ・メンバーを変更しないことを保証します.
    次の例は、funがconstメンバー関数であるため、オブジェクトのメンバー変数ageを変更できません.
    void fun(int val)const{
         cout << "num = " << num << endl;
         age = val;//      。
    }
    

    (1):constメンバー関数はconstおよび非constデータメンバーにアクセスできます.ただし、const以外のデータメンバーは変更できません.
    (2):constメンバー関数では、他のconstのメンバー関数しか呼び出せません.
    (3):void fun(int val)const;およびvoid fun(int val);2つの関数がリロード関数を構成します.
    constオブジェクトはconstメンバー関数のみを呼び出すことができます.
    非constオブジェクトは、非constメンバー関数を優先的に呼び出しますが、fun関数がconst関数のみの場合、非constオブジェクトもconstメンバー関数を呼び出します.(ただし、この非constメンバー関数ではオブジェクトメンバー変数は変更できません)
  • const修飾クラスオブジェクト
  • constオブジェクトa:const A a(100)を定義します.
    const修飾関数は、関数のレベルから、データを変更しません.
    const修飾クラスオブジェクトは、オブジェクトのレベルから、データを変更せずにconstメンバー関数のみを呼び出すことができます.
    constオブジェクトはconstメンバー関数のみを呼び出すことができます.
    非constオブジェクトは、非constメンバー関数を優先的に呼び出しますが、fun関数がconst関数のみの場合、非constオブジェクトもconstメンバー関数を呼び出します.(ただし、この非constメンバー関数ではオブジェクトメンバー変数は変更できません)