2010-11-05 299 views
7
void foo() { 
    static int x; 
} 

void bar() { 
    static int x; 
} 

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

鉴于代码?没有。 – 2010-11-05 17:07:05

+0

他们不声明相同的变量。两个不同的函数永远不会声明相同的静态局部变量。 – 2010-11-05 17:23:10

回答

20

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

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

static int x; 

void foo() { 
    static int x; 
} 

int main() { 
    foo(); 
} 

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

+0

@FredOverflow:谢谢你捕捉... – 2010-11-05 17:08:20

+0

是匿名命名空间被认为比C++中的静态全局更好的风格? “static int x;”的两个用法(一个全球性的,一个地方性的)似乎使问题复杂化了。 – Flexo 2010-11-05 17:08:46

+3

@awoodlannd:在C++(D.2/1)中不推荐使用'static'来达到此目的。是否更好的风格取决于你问的人是否同意这种弃用... – 2010-11-05 17:17:16

3

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

6

变量是不同的,每个函数都有自己的范围。因此,尽管这两个变量在整个过程中都是持续的,但它们不会互相干扰。

1

这两个静态变量是不同的。

2

没有发生,这两个变量有theri范围和十个分量他们的价值观呼叫

0

的compilator翻译以独特的方式为每个变量调用,在你的例子,如foo_xbar_x,所以他们threated不同。

不要这样做,因为您的代码在一段时间后很难阅读和维护,因为您无法一次捕捉到您所指的x

相关问题