В 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
, IE, это обязанность вашего компилятора за то, чтобы они не сталкивались.
Ничто не происходит, оба переменных имеют охват Theri и Mantain их ценности, чтобы позвонить в звонок
Две статические варики разные.
Компилятор переводит каждую переменную уникальным способом, например foo_x
и bar_x
В вашем примере, поэтому им угрожают по -другому.
Не делай этого, поскольку ваш код будет трудно прочитать и поддерживать через некоторое время, так как вы не сможете сразу поймать x
Вы имеете в виду.