C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C ++の変数のストレージクラスとは何ですか?


ストレージクラスは、C ++プログラム内の変数や関数のスコープ(可視性)と存続期間を定義します。これらの指定子は、変更するタイプの前にあります。 C++プログラムで使用できる次のストレージクラスがあります。

  • 自動
  • 登録
  • 静的
  • 外部
  • 可変

Cでは、自動ストレージクラス指定子を使用すると、自動ストレージを使用して変数を明示的に宣言できます。自動ストレージクラスは、ブロック内で宣言された変数のデフォルトです。自動ストレージを持つ変数xは、xが宣言されたブロックが終了すると削除されます。

自動ストレージクラス指定子は、ブロックで宣言された変数の名前または関数パラメーターの名前にのみ適用できます。ただし、これらの名前にはデフォルトで自動ストレージがあります。したがって、ストレージクラス指定子autoは通常、データ宣言では冗長です。

当初は構文上の互換性のためにC++に引き継がれましたが、後で独自の意味を持つ自動型推論が行われました。

Cでは、レジスタストレージクラス指定子は、オブジェクトをマシンレジスタに格納する必要があることをコンパイラに示します。レジスタストレージクラス指定子は、通常、アクセス時間を最小限に抑えてパフォーマンスを向上させることを期待して、ループ制御変数などの頻繁に使用される変数に対して指定されます。ただし、コンパイラはこの要求を受け入れる必要はありません。ほとんどのシステムで使用できるレジスタのサイズと数が限られているため、実際にレジスタに入れることができる変数はほとんどありません。

静的ストレージクラスは、プログラムがスコープに出入りするたびにローカル変数を作成および破棄するのではなく、プログラムの存続期間中、ローカル変数を存在させ続けるようにコンパイラーに指示します。したがって、ローカル変数を静的にすると、関数呼び出し間で値を維持できます。

externストレージクラス指定子を使用すると、複数のソースファイルが使用できるオブジェクトを宣言できます。 extern宣言は、記述された変数を現在のソースファイルの後続部分で使用できるようにします。この宣言は定義を置き換えるものではありません。宣言は、外部で定義された変数を記述するために使用されます。

可変ストレージクラス指定子は、クラスデータメンバーがconstとして宣言されたオブジェクトの一部であっても、それを変更可能にするためにクラスデータメンバーでのみ使用されます。 static、const、または参照メンバーとして宣言された名前で可変指定子を使用することはできません。

class A
{
   public:
   A() : x(4), y(5) { };
   mutable int x;
   int y;
};

int main()
{
   const A var2;
   var2.x = 345;
   // var2.y = 2345;
}

var2がconstとして宣言されているため、コンパイラはvar2.y=2345の割り当てを許可しません。 A ::xが可変として宣言されているため、コンパイラはvar2.x=345の割り当てを許可します。



  1. C#のクラスは何ですか?

    クラスを定義するときは、データ型の青写真を定義します。オブジェクトはクラスのインスタンスです。クラスを構成するメソッドと変数は、クラスのメンバーと呼ばれます。 クラス定義は、キーワードclassで始まり、その後にクラス名が続きます。中括弧で囲まれたクラス本体。以下は、クラス定義の一般的な形式です- <access specifier> class class_name {    // member variables    <access specifier> <data type> variable1; &nbs

  2. C#のクラスのメンバー変数は何ですか?

    クラスは、C#のメンバー変数と関数を持つ青写真です。これは、オブジェクトの動作を説明しています。 クラスの構文を見て、メンバー変数とは何かを学びましょう- <access specifier> class class_name {    // member variables    <access specifier> <data type> variable1;    <access specifier> <data type> variable2;   &nb