静的なクラス変数はextern変数と同じですか?クラススコープでのみですか?

static int x / extern int x で宣言するだけなので、静的クラス変数はextern変数と同じです。 >ステートメントを作成し、実際に他の場所に定義します(通常は.cppファイル内にあります)

静的クラス変数

// .h file
class Foo
{
    static int x ;
} ;

// .cpp file
int MyClass::x = 0 ;

外部変数:

// .h file
extern int y;

// .cpp file
int y = 1;

どちらの場合も、変数はどこかで一度宣言され、コンパイルに複数回含まれないファイルで定義されます(そうでなければリンカーエラーです)

6

3 答え

はい、どちらも静的な記憶期間と外部リンケージを持っています。本質的に同じランタイムプロパティを持ち、コンパイル時の可視性だけが異なります。

4
追加された

多かれ少なかれ。両方とも外部リンケージと静的寿命を持っています。両方 プログラムの起動時に初期化され、終了時に破棄されます。

2
追加された

はい。

追加情報として、非オプションの名前空間/モジュールを使用するいくつかのプログラミング言語では、静的なクラス変数をグローバル変数と交換することができます。

場合によっては、他のプログラミング変数には静的なクラス変数もなく、グローバル変数を使用することもできます。

いくつかの開発者は静的クラス変数の使用を好み、クラスとの関係を強制します。

たとえ両方の機能が利用可能であっても、アプリケーションをどのように設計しているかの問題です。

1
追加された