Что происходит в 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 Вы имеете в виду

Другие вопросы по тегам