void foo() {
static int x;
}
void bar() {
static int x;
}
int main() {
foo();
bar();
}
回答
他们每个人都只看到自己的一个。变量不能“看到”从它被声明的scope外
如果,另一方面,你这样做:
static int x;
void foo() {
static int x;
}
int main() {
foo();
}
然后foo()
只能看到它的本地x
;全球x
已被其“隐藏”。但改变一个不会影响另一个的价值。
@FredOverflow:谢谢你捕捉... – 2010-11-05 17:08:20
是匿名命名空间被认为比C++中的静态全局更好的风格? “static int x;”的两个用法(一个全球性的,一个地方性的)似乎使问题复杂化了。 – Flexo 2010-11-05 17:08:46
@awoodlannd:在C++(D.2/1)中不推荐使用'static'来达到此目的。是否更好的风格取决于你问的人是否同意这种弃用... – 2010-11-05 17:17:16
这很好。实际上,编译器输出中变量的实际名称可以被认为是function_bar_x
之类的东西,即编译器有责任确保它们不会发生冲突。
变量是不同的,每个函数都有自己的范围。因此,尽管这两个变量在整个过程中都是持续的,但它们不会互相干扰。
这两个静态变量是不同的。
没有发生,这两个变量有theri范围和十个分量他们的价值观呼叫
的compilator翻译以独特的方式为每个变量调用,在你的例子,如foo_x
和bar_x
,所以他们threated不同。
不要这样做,因为您的代码在一段时间后很难阅读和维护,因为您无法一次捕捉到您所指的x
。
- 1. Objective-C中的不同静态变量声明如何?
- 2. 在Swift类或结构中声明为静态的变量会发生什么?
- 3. 在函数中声明静态变量
- 4. 函数内部声明的静态变量的值是什么?
- 5. 为什么我不能在Java中声明两次相同的变量?
- 6. 如何在内联函数中声明一个静态变量?
- 7. 为什么我不能在C#中的不同范围内声明一个具有相同名称的变量?
- 8. PHP - 如果我得到两个相同的会话ID会发生什么?
- 9. 如果变量未在Javascript中声明,会发生什么情况?
- 10. C++:有两个相同的函数,一个给出错误。发生什么事?
- 11. 在Ruby中声明变量时后台会发生什么?
- 12. 为什么这两个函数不会返回相同的值?
- 13. 在C++中给定的相同范围内声明相同的变量名称
- 14. 为什么这两个数学函数不会返回相同的结果?
- 15. 如果两个ObjC类别重写相同的方法会发生什么?
- 16. 为什么我不能转发声明静态函数?
- 17. 声明的,如果块是从不打约一个函数内声明的静态变量
- 18. 为什么不能在非静态块中声明静态最终变量?
- 19. 声明静态变量时的输出是什么?为什么?
- 20. 在ruby中,我该如何声明C++等价的“静态”函数变量?
- 21. php如果两个人同时追加会发生什么?
- 22. 如果两个人同时提交编辑,会发生什么
- 23. 如何比较在angularjs中的两个不同函数中声明的两个不同的对象数组?
- 24. 为什么在相同结构变量的多个声明中没有错误
- 25. 如何在具有相同名称的变量的静态函数中访问全局静态变量
- 26. 如果我将相同的文件提交到两个不同的存储库,会发生什么
- 27. 为什么不在相同的行上声明几个相同类型的变量?
- 28. 不同的函数声明
- 29. 如果构造函数被声明为不完整类型,会发生什么?
- 30. 为什么Java变量声明中的类型不同?
鉴于代码?没有。 – 2010-11-05 17:07:05
他们不声明相同的变量。两个不同的函数永远不会声明相同的静态局部变量。 – 2010-11-05 17:23:10