さらに別のstatic
質問です。 私は次のことを読んだことがある:hファイル内の静的キーワードと内部リンケージ
- What are static variables?
- file scope and static floats
- http://msdn.microsoft.com/en-us/library/s1sb61xd.aspx
そして、私はまだ、次の行動を理解することができない: 私は1つのh
ファイルがあります:
// StaticTest.h
#include <stdio.h>
static int counter = 0;
struct A {
A() {
counter++;
printf("In A's ctor(%d)\n", counter);
}
~A() {
counter--;
printf("In A's dtor(%d)\n", counter);
}
};
static A a;
を の
そして2 cpp
ファイル:
// StaticTest1.cpp
#include "StaticTest.h"
int main() {
return 0;
}
そして:
// StaticTest2.cpp
#include "StaticTest.h"
プログラムの出力は次のとおりです。
今In A's ctor(1)
In A's ctor(2)
In A's dtor(1)
In A's dtor(0)
、A
のコンストラクタはh
以来、2回呼び出されファイルは2回含まれ、A
のインスタンスa
はstatic
と宣言されているため、内部リンケージがあり、コンパイラは満足しています。 counter
も静的であると宣言されているため、内部リンケージもあり、2つのcpp
ファイルで値が共有されないことが予想されますが、プログラム出力は値が2までカウントされることを意味します。
洞察?
EDIT: h
対cpp
ファイル内の静的変数の宣言の文脈における「良いプログラミング習慣を」も歓迎されると考えられるものに関するすべての答え。
*実装の詳細について何かを言うと、約コンパイル時に初期化実行時に初期化静的な値に対して静的な値を、私はそれを答えとして掲示することに自信を持っていません。 'counter'を初期化しないで' main() 'に初期化してみてください。 –
@ Benoit Thiery:これは完全なソースコードです。 –
@ Ignacio Vazquez-Abrams:MSDNのページから: "変数を宣言すると、変数には静的持続時間があり、別の値" –