C ++では、2つの異なる関数が同じ静的変数を宣言するとどうなりますか?

StackOverflow https://stackoverflow.com/questions/4108147

質問

void foo() {
    static int x;
}

void bar() {
    static int x;
}

int main() {
    foo();
    bar();
}
役に立ちましたか?

解決

彼らはそれぞれ自分のものだけを見る。変数は外部から「見る」ことはできません 範囲 それが宣言されていること。

一方、あなたがこれをした場合:

static int x;

void foo() {
    static int x;
}

int main() {
    foo();
}

それから foo() 地元の人だけを見るだけです x;グローバル x それによって「隠されている」。ただし、1つの変更は他方の価値に影響しません。

他のヒント

変数は異なり、各関数には独自の範囲があります。したがって、両方の変数はプロセスの寿命にわたって持続しますが、互いに干渉しません。

これはまったく問題ありません。実際には、コンパイラの出力の変数の実際の名前は、 function_bar_x, 、つまり、これらが衝突しないようにすることはあなたのコンパイラの責任です。

何も起こりません、両方の変数にはTheriスコープがあり、呼び出しに電話する価値があります

2つの静的VARは異なります。

コンピレーターは、各変数を一意の方法で変換します。 foo_xbar_x あなたの例では、彼らは異なる方法で脅迫されています。

あなたのコードはしばらくして読んで維持するのが難しいので、これをしないでください x あなたは言及していますか。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top