В C ++, что происходит, если две разные функции заявляют о том же статической переменной?

StackOverflow https://stackoverflow.com/questions/4108147

Вопрос

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, IE, это обязанность вашего компилятора за то, чтобы они не сталкивались.

Ничто не происходит, оба переменных имеют охват Theri и Mantain их ценности, чтобы позвонить в звонок

Две статические варики разные.

Компилятор переводит каждую переменную уникальным способом, например foo_x и bar_x В вашем примере, поэтому им угрожают по -другому.

Не делай этого, поскольку ваш код будет трудно прочитать и поддерживать через некоторое время, так как вы не сможете сразу поймать x Вы имеете в виду.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top