C++ヘッダーファイルに静的グローバル変数がある場合、ヘッダーファイルを含む各変換単位は、変数の独自のコピーで終了します。インラインメンバー関数によって使用される静的グローバル変数
#include <iostream>
static int n = 10;
class Foo {
public:
void print() { std::cout << n << std::endl; }
};
:しかし、私は、同じヘッダファイル内のクラスを宣言し、そのクラスのメンバ関数を作成する場合、例えば、静的なグローバル変数を使用してクラス宣言内にインラインで実施
その後、私は、GCC 4.4の下で少し奇妙な行動を参照してください。
私は最適化せずにコンパイルした場合は、メンバ関数のすべての使用は、翻訳単位の1(G ++コマンドに言及した最初のものから、変数のコピーを使用しますライン)。
-O2
でコンパイルした場合、メンバー関数を使用するたびに、大文字小文字が変換された変換単位の変数のコピーが使用されます。
明らかにこれは本当に悪いデザインなので、この質問は好奇心から外れています。しかし、私の質問にもかかわらず、C + +の標準はこのケースについて何を言っているのですか?最適化を有効にした場合としなかった場合の動作を変えることでg ++が正しく動作しますか?
可能な重複:[hファイルの静的キーワードと内部リンケージ](http://stackoverflow.com/questions/4276794/static-keyword-in-h-file-and-internal-linkage)。 –