C++ のストレージ クラス
ストレージ クラスは、C++ プログラム内の変数や関数のスコープ (可視性) と寿命を定義します。これらの指定子は、変更する型の前に置かれます。 C++ プログラムで使用できる次のストレージ クラスがあります
- オート
- 登録
- 静的
- 外部
- 可変
自動ストレージ クラス
オート ストレージ クラスは、すべてのローカル変数のデフォルトのストレージ クラスです。
{ int mount; auto int month; }
上記の例では、同じストレージ クラスを持つ 2 つの変数を定義しています。auto は、関数内、つまりローカル変数内でのみ使用できます。
レジスタ ストレージ クラス
レジスター ストレージ クラスは、RAM ではなくレジスタに格納する必要があるローカル変数を定義するために使用されます。これは、変数の最大サイズがレジスタ サイズ (通常は 1 ワード) に等しく、単項 '&' 演算子を適用できないことを意味します (メモリ ロケーションがないため)。
{ register int miles; }
レジスタは、カウンタなどの迅速なアクセスが必要な変数にのみ使用してください。また、「レジスタ」を定義しても、変数がレジスタに格納されるわけではないことに注意してください。これは、ハードウェアと実装の制限に応じて、レジスタに格納される可能性があることを意味します.
静的ストレージ クラス
静的 storage クラスは、スコープに出入りするたびにローカル変数を作成して破棄するのではなく、プログラムの存続期間中ローカル変数を存在させておくようにコンパイラに指示します。したがって、ローカル変数を静的にすると、関数呼び出し間で値を維持できます。
static 修飾子は、グローバル変数にも適用できます。これが行われると、その変数のスコープは、それが宣言されているファイルに制限されます。
C++ では、クラス データ メンバーで static を使用すると、そのメンバーの 1 つのコピーのみがそのクラスのすべてのオブジェクトによって共有されます。
ライブデモ#include <iostream> // Function declaration void func(void); static int count = 10; /* Global variable */ main() { while(count--) { func(); } return 0; } // Function definition void func( void ) { static int i = 5; // local static variable i++; std::cout << "i is " << i ; std::cout << " and count is " << count << std::endl; }
上記のコードをコンパイルして実行すると、次の結果が生成されます −
i is 6 and count is 9 i is 7 and count is 8 i is 8 and count is 7 i is 9 and count is 6 i is 10 and count is 5 i is 11 and count is 4 i is 12 and count is 3 i is 13 and count is 2 i is 14 and count is 1 i is 15 and count is 0
extern ストレージ クラス
外部 ストレージ クラスは、すべてのプログラム ファイルに表示されるグローバル変数の参照を提供するために使用されます。 'extern' を使用すると、変数は初期化できません。これは、以前に定義されたストレージの場所で変数名を指すだけだからです。
複数のファイルがあり、他のファイルでも使用されるグローバル変数または関数を定義する場合、 extern 定義された変数または関数を参照するために別のファイルで使用されます。 extern を理解するためだけに 別のファイルでグローバル変数または関数を宣言するために使用されます。
extern 修飾子は、以下で説明するように、同じグローバル変数または関数を共有する 2 つ以上のファイルがある場合に最も一般的に使用されます。
最初のファイル:main.cpp
#include <iostream> int count ; extern void write_extern(); main() { count = 5; write_extern(); }
2 番目のファイル:support.cpp
#include <iostream> extern int count; void write_extern(void) { std::cout << "Count is " << count << std::endl; }
ここで、extern キーワードは、別のファイルで count を宣言するために使用されています。これら 2 つのファイルを次のようにコンパイルします −
$g++ main.cpp support.cpp -o write
これにより write が生成されます 実行可能プログラム、write を実行してみてください 次のように結果を確認します-
$./write 5
ミュータブル ストレージ クラス
ミュータブル 指定子は、このチュートリアルで後述するクラス オブジェクトにのみ適用されます。オブジェクトのメンバーが const メンバー関数をオーバーライドできるようにします。つまり、変更可能なメンバーは const メンバー関数によって変更できます。
C言語