C89:静的オン(静的)

I.はじめに

constがメモリ自体の種類が値について言っている、とメモリの静的変性タイプは、ライフサイクルについて言っている修正しました

機能はすべてこのスタイルコーディング良いですが、静的なキーワードを宣言するために、この文書を使用するための唯一の

他の隠されたソースファイルに(1)

(2)専用メモリ、一意であることが、持続的なメモリ変数を維持すること

(3 )デフォルト値は0に初期化されます

注:パラメータは静的に変更することはできません

 

  • ルール:

ルール1:リリースに費やさ普通のローカル変数、私たちは、あなたがこのデータを保持するために静的変数を使用することができます別の変数データを使用する必要があるので、何回も

 

 

 

II。Cコードについて

(1)ローカル変数を変更します

長続きのメモリを保つ(一意で、専用メモリ)

ルール1:リリースに費やさ普通のローカル変数、私たちは、あなたがこのデータを保持するために静的変数を使用することができます別の変数データを使用する必要があるので、何回も

A(){ 
     
    // 使用後のプロセスのスタック領域に保存されている通常のローカル変数は、すぐにリリースされる予定
     // 静的ローカル変数コンパイラは、0に初期化グローバルデータの過程で保存され、プログラムの終了時に解放デフォルト設定されます
    静的な int型 A = 1 ; 
}

 

(2)グローバル変数を変更

他のソースファイルから隠されています

ルール2:グローバル変数は複数のスレッドが静的変数と競合同じデータを引き起こす可能性がありますが、単一のソースファイル内部を保持するために使用することができます

// グローバル変数永続メモリ自体、他のソースファイルを遮蔽するための静的なグローバル変数変数
  
// グローバル変数は、関数の外側本体に定義されている、ストレージ・スペースがグローバルデータ領域に割り当てられ、コンパイラが自動的に意志とその初期化
 // プロジェクト全体のための通常のグローバル変数見え、他のファイルは、他の文書は、同じ名前の変数を定義することができないことを、使用のextern外部宣言の後に直接使用することができます
 。// 静的なグローバル変数のみ、現在のファイルに表示され、アクセスできなく他のファイル、他のファイルは、変数と同じ名前を持つことができます
  
  
// file1.cpp 
int型VARA、
 静的な int型VARB; 
  
// file2.cpp 
にextern  int型 VARA;         //は、グローバル変数の別のソース使用
のextern  int型 VARBを;         // エラー、静的なグローバル変数はシールドされています

 

(3)グローバル関数を変更

他のソースファイルから隠されています

ルール3:

// 非静的関数を直接extern宣言を追加していない別のファイルで参照することができます
 。// 静的な機能をのみ見ることができ、他の文書は、そのファイル上の文で関数を参照することはできません
 // 別のファイルと同じ名前の静的関数を使用することができます
  
/ / file1.cpp 
  
のextern  ボイドフナ(){}
 静的 ボイドfunB(){} 
  
// file2.cpp 
  
のextern  ボイドフナ();     // 使用グローバル変数、他のソースファイル
のextern  ボイド funBを();     // エラー、静的グローバル関数は、シールドの関数であり、

 

以下のためのIII。C ++コード

ライフサイクルはまだそこにあるので、非静的メンバは、静的メンバにアクセスすることができます。

静的メンバは非静的メンバにアクセスすることはできません

(1)変形クラスの静的メンバ変数

デフォルトは長期的な(一意で、専用メモリ)の記憶を保つ、0に初期化され、このポインタは存在しません

// 静的メンバは、任意のオブジェクトのインスタンスの缶アクセス作成することなく、独立してアクセスすることができる
 // 各オブジェクトの通常のメンバ関数が異なる変数を有するが、各クラス唯一の変数メモリの静的メンバ変数(グローバルデータ/静的領域)メモリ
  
// TEST.Hの
クラスA {
     プライベート静的 のconst  int型A; 
} 
  
// TEST.CPP 
のconst  int型 A :: A = 1 ;     // プライベートで保護されていないアクセス制限

 

(2)変形クラスの静的メンバ関数

長続きのメモリを保つ(一意で、専用メモリ)

 

// これは静的メンバ関数ポインタではありませんので、非静的メンバ関数やクラスの静的メンバ関数の変数は、クラスを呼び出すことはできません
 // クラスを呼び出すことができる静的メンバ関数と変数非静的メンバ関数
 // 静的メンバ関数を同時にすることはできません仮想CONST揮発性関数は、宣言された
  
クラス{A
     公共仮想 静的 ボイド ; FUN1()     // エラー
        静的 ボイド fun2()のconst ;       // エラー
        静的 ボイド fun2()揮発性 ;    // エラー 
}。

 

おすすめ

転載: www.cnblogs.com/k5bg/p/11822165.html