C++constのいくつかの理解

2625 ワード

エントリ1:ヘッダファイルのconstグローバル変数
C++ヘッダファイルでは、グローバルconst変数を定義デフォルトはstaticであるため、ヘッダファイルでグローバルconst変数を定義し、前にstaticを追加する必要がなく重複定義を防止し、追加してもエラーが発生しない--副作用はない.
エントリ2:ヘッダファイルで「非const」および「static非const」グローバル変数を定義しないでください
C++ヘッダファイル、グローバル非const変数を定義します.staticを追加しないと、繰り返し定義リンクエラーが発生します.解決方法:グローバル非const変数にstaticを追加します.しかし、ヘッダファイルにグローバル非const変数を定義します.何をしたいですか.ヘッダファイルに非constグローバル変数を定義するプログラマーに対して、お尻に足を踏み入れることができます.彼に言って
エントリ3:ヘッダファイルでグローバル関数を定義する
ヘッダファイルでグローバル関数を定義すると、「リンクの繰り返し定義エラー」が発生します.解決方法:(1)グローバル関数を「静的グローバル関数」と宣言します.すなわち、関数の前にstaticキーを追加します(2)グローバル関数を「インライン関数」と定義します.すなわち、関数の数の前にinlineキーを追加します.
エントリ4:Class(structを含む)のconst
クラスのconstはグローバルconstと異なる:(1)クラスconstメンバー変数は、グローバルconst変数とは異なる.constメンバーの場合、クラスインスタンスごとに1部が含まれ、値が異なる場合があります.グローバルconst変数には(2)クラスconstメンバー変数が1部しかないが、厳密には字面上のconst(コンパイル期間定数)ではなく、C#のreadonlyのように、実行期間、クラスインスタンス構築関数「初期化リスト」で初期化され、初期化後、クラスインスタンスの宣言周期クラスでは、このconstメンバー変数値は変更できない.(3)クラスstatic const変数はグローバルconst変数と同じ意味であり、クラスstatic const変数はクラスインスタンスメンバーではなくクラスメンバーに属する.
クラスstatic const変数の宣言、定義には2つの方法がある:a.
class Test
    {
        static const int ConstNum = 5;
    }

    int main()
    {
        Test t;
        cout << t::ConstNum << '
'
; // 5 }

b.
class Test
    {
        static const int ConstNum;
    }

    //static const Test::ConstNum = 5;  //     ,     static
    const int Test::ConstNum = 5;


    int main()
    {
        Test t;
        cout << t::ConstNum << '
'
; // 5 }

エントリ5:
抜粋:
constグローバル定数こそ真の意味での定数であり,局所const定数は真の意味での定数ではない.constグローバル定数記憶領域はテキスト定数領域に割り当てられ、ローカルではスタック領域に割り当てられます.
したがってconstグローバル定数は変更できません.
個人的な理解:constグローバル定数およびローカルstatic const定数こそ真の意味での定数であり、ローカルはstatic const定数ではなく真の意味での定数である.constグローバル定数記憶領域はテキスト定数領域に割り当てられ、ローカルではスタック領域に割り当てられます.