Что происходит в C++, если две разные функции объявляют одну и ту же статическую переменную?
void foo() {
static int x;
}
void bar() {
static int x;
}
int main() {
foo();
bar();
}
6 ответов
Каждый из них видит только своего. Переменная не может быть "видна" за пределами области, в которой она объявлена.
Если, с другой стороны, вы сделали это:
static int x;
void foo() {
static int x;
}
int main() {
foo();
}
затем foo()
видит только его местный x
; глобальный x
был "спрятан" им. Но изменения одного не влияют на ценность другого.
Переменные различны, каждая функция имеет свою область видимости. Таким образом, хотя обе переменные существуют в течение всего жизненного цикла процесса, они не мешают друг другу.
Это прекрасно. На практике фактическое имя переменной в выводе компилятора можно рассматривать как нечто вроде function_bar_x
т.е. ваш компилятор несет ответственность за то, чтобы они не конфликтовали.
Ничего не происходит, обе переменные имеют свою область видимости и поддерживают свои значения для вызова
Компилятор переводит каждую переменную уникальным способом, таким как foo_x
а также bar_x
в вашем примере, поэтому они угрожают по-разному.
Не делайте этого, потому что ваш код будет трудно читать и поддерживать через некоторое время, так как вы не сможете сразу поймать, что x
Вы имеете в виду