C++のstaticキーワードの役割

2201 ワード

1.まず最初に紹介するのも最も重要な1つです.隠すことです.(static関数、static変数でも可)
複数のファイルを同時にコンパイルすると、static接頭辞を付けないグローバル変数と関数はすべてグローバル可視性を有します.
2.staticの第2の役割は、変数コンテンツの持続性を維持することである.(static変数における記憶機能とグローバル生存期間)
静的データ領域に格納された変数は、プログラムの実行が開始されると初期化が完了し、唯一の初期化です.両方の変数が静的ストレージ領域に格納されます.グローバル変数とstatic変数ですが、グローバル変数に比べてstaticは変数の可視範囲を制御することができます.staticはあくまでstaticが隠すために使用されます.この使い方は一般的ではありませんが、staticローカル変数として関数内で定義されている場合、その生存期間はソースプログラム全体ですが、その役割ドメインは自動変数と同じで、その変数を定義する関数内でのみ使用できます.この関数を終了すると、変数はまだ存在しますが、使用できません.
#include 
 
int fun(){
    static int count = 10; //             ,  a     10!     1,         ,a
    return count--; //          ,     1   ; static   ,        ,         :    
 
}
 
int count = 1;
 
int main(void)
{
     printf("global\t\tlocal static
"); for(; count <= 10; ++count) printf("%d\t\t%d
", count, fun()); return 0; }

3.staticの3つ目の役割は、デフォルトの初期化を0(static変数)にすることです.
グローバル変数も静的データ領域に格納されるため、グローバル変数もこの属性を備えています.
4.staticの4番目の役割:C++のクラスメンバー宣言static
クラスでstatic変数または関数を宣言する場合、初期化時に役割ドメイン演算子を使用してクラスが属することを示すため、静的データ・メンバーはオブジェクトのメンバーではなくクラスのメンバーであり、次のような役割を果たします.
(1)クラスの静的メンバー関数はクラス全体ではなくクラス全体に属するオブジェクトであるため、thisポインタがなく、クラスの静的データと静的メンバー関数のみにアクセスできるようになる.     
(2)静的メンバー関数を虚関数として定義することはできない.     
(3)静的メンバはクラスに宣言され,その外で動作するため,アドレスを取る操作は多少特殊であり,変数アドレスはそのデータ型を指すポインタであり,関数アドレスタイプは「nonmember関数ポインタ」である.
(4)静的メンバ関数にはthisポインタがないため,差がnonmember関数に等しくない結果,callback関数となり,C++とC-based X W indowシステムを結合するとともにスレッド関数への応用に成功するという予想外の利点が生じた.(これは出会ったことがない)
(5)staticはプログラムの時空オーバーヘッドを増加させず,逆にサブクラスの親クラスの静的メンバーへのアクセス時間を短縮し,サブクラスのメモリ領域を節約した.     
(6)静的データメンバーは,時の前にキーワードstaticを付ける.     
(7)静的データメンバは静的に格納されているので,初期化する必要がある.(プログラマは手動で初期化します.そうしないとコンパイル時にエラーは報告されませんが、Linkでエラーが報告されます)
(8)静的メンバー初期化は、一般的なデータメンバー初期化とは異なります.
初期化はクラス外で行われ、一般的な静的変数やオブジェクトと混同されないようにstaticは加算されません.初期化時にそのメンバーのアクセス権制御子private、publicなどを追加しない.初期化時に役割ドメイン演算子を使用して、その属するクラスを明記します.静的データ・メンバーの初期化のフォーマット:::=
(9)親の影響を防ぐために、親と同じ静的変数を子クラスに定義して、親の影響を遮断することができます.ここで注意する必要があります.静的メンバーは親と子の共有ですが、静的メンバーを繰り返し定義しています.これはエラーを引き起こすのではないでしょうか.いいえ、私たちのコンパイラは絶妙な手法を採用しています.name-manglingは唯一のフラグを生成するために使用されます.