在C ++中,如果两个不同的函数声明相同的静态变量会发生什么?

时间:2010-11-05 16:57:03

标签: c++ function static static-variables

void foo() {
    static int x;
}

void bar() {
    static int x;
}

int main() {
    foo();
    bar();
}

6 个答案:

答案 0 :(得分:20)

他们每个人只看到自己的一个。变量不能从它声明的scope之外“看到”。

另一方面,如果你这样做了:

static int x;

void foo() {
    static int x;
}

int main() {
    foo();
}

然后foo()只能看到其本地x;全球x已被其“隐藏”。但改变一个不会影响另一个的价值。

答案 1 :(得分:6)

变量是不同的,每个函数都有自己的范围。因此,尽管两个变量都持续了整个过程的生命周期,但它们并没有相互干扰。

答案 2 :(得分:3)

这很好。实际上,编译器输出中变量的实际名称可以被认为是类似function_bar_x的东西,即编译器有责任确保它们不会发生冲突。

答案 3 :(得分:2)

没有任何事情发生,两个变量都有其范围并保持其值以在呼叫中调用

答案 4 :(得分:1)

两个静态变量不同。

答案 5 :(得分:0)

编译器以独特的方式翻译每个变量,例如示例中的foo_xbar_x,因此它们的威胁方式不同。

不要这样做,因为您的代码在一段时间后难以阅读和维护,因为您无法立即了解您所指的x