在C ++中,如果两个不同的函数声明相同的静态变量会发生什么?
-
29-09-2019 - |
题
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
它被它“隐藏”了。但是一个变化不会影响另一个的价值。
其他提示
变量是不同的,每个函数都有自己的范围。因此,尽管两个变量在过程的寿命中持续使用,但它们不会彼此干扰。
这很好。实际上,可以将编译器输出中变量的实际名称视为类似 function_bar_x
, ,即确保这些不冲突是您的编译器的责任。
什么都没有发生,两个变量都有其范围和Mantain的价值
两个静态VAR是不同的。
编译器以独特的方式翻译每个变量,例如 foo_x
和 bar_x
在您的示例中,因此他们的威胁有所不同。
不要这样做,因为您的代码在一段时间后很难读取和维护,因为您将无法一次捕获什么 x
你指的是吗?
不隶属于 StackOverflow