C++静的持続変数static

1316 ワード

C++は、静的ストレージ持続性変数の3つのリンクを提供します.外部リンク性、内部リンク性、およびリンクなしです.
この3つのリンク性は、プログラムの実行期間全体にわたって存在し、自動変数に比べて寿命が長い.静的変数の数はプログラムの実行中に変わらないため、スタックなどの特殊な装置を使用して管理する必要はありません.コンパイラは、プログラムの実行中に常に存在するすべての静的変数を格納するために固定されたメモリブロックを割り当てます.
静的変数が明示的に初期化されていない場合、コンパイラはそれを0に設定します.デフォルトでは、静的配列と構造は、各要素またはメンバーのすべてのビットを0に設定します.
3つの静的持続変数の作成:
  • 外部にリンクされた静的持続変数を作成するには、コードブロックの外で宣言する必要があります.
  • 内部にリンクされた静的持続変数を作成するには、コードブロックの外で宣言し、static限定子を使用する必要があります.
  • リンク性のない静的持続変数を作成するには、コードブロック内で宣言し、static限定子を使用する必要があります.

  • 3つの静的持続変数の例:
    ……
    int  NUM_ZDS_GLOBAL = 80;                  //#1
    static  int NUM_ZDS_ONEFILE = 50;          //#2
    
    int  main(){
    …
    }
    
    void  fun1(int n){
             static int  nCount = 0;            //#3
             int  nNum = 0;                     //#4
    }
    
    void  fun2(int q){
             …
    }
    

    #1、#2、#3は、プログラムの実行期間全体にわたって存在する.fun 1で宣言された3の役割ドメインはローカルであり、リンク性がない.これは、自動変数4のようにfun 1関数でのみ使用できることを意味する.ただし、#4とは異なり、fun 1が実行されていない場合でも、#3はメモリに保持される.
    #1、#2の役割ドメインは、ファイル全体であり、宣言された場所からファイルの最後までの範囲で使用できます.
    具体的には、main、fun 1、fun 2で使用することができる.#2のリンク性は内部であるため、上記のコードを含むファイルでのみ使用できます.#1のリンクは外部なので、プログラムの他のファイルで使用できます.
    すべての静的持続変数には、次の2つの特徴があります.
  • 初期化されていない静的変数のすべてのビットは0に設定される.
  • では、定数式のみを使用して静的変数を初期化できます.

  • 定数式では、フォント値定数、const定数、enum定数、sizeofオペレータを使用できます.