Одинаковые имена переменных в C++
Пусть и снаружи функции, и внутри есть переменная
num. В этом случае любые изменения
с локальной переменной num никак не
влияют на глобальную переменную num:
#include <iostream>
int num = 1; // глобальная переменная
void func() {
int num = 2; // локальная переменная
std::cout << num << "\n";
}
int main() {
func(); // вызываем функцию, выведет 2
std::cout << num << "\n"; // выведет 1 - глобальная переменная не поменялась
return 0;
}
Но, если мы забудем объявить локальную переменную
num, то внутри функции
не создастся локальная переменная num,
а просто изменится глобальная переменная:
#include <iostream>
int num = 1;
void func() {
num = 2; // забыли объявить - меняем внешнюю переменную
std::cout << num << "\n";
}
int main() {
func(); // вызываем функцию, выведет 2
std::cout << num << "\n"; // выведет 2 - переменная поменялась
return 0;
}
Тут может быть две ситуации: или мы действительно хотели поменять глобальную переменную (тогда все ок), или мы забыли объявление и случайно поменяли глобальную переменную.
Второй случай является трудноуловимой ошибкой, ведущей к непредсказуемому поведению программы. Поэтому всегда, вводя новую переменную, объявляйте ее.
Определите, не запуская код, что выведется в консоль:
int num = 1;
void func() {
num = 2;
}
int main() {
func();
std::cout << num << "\n";
return 0;
}
Определите, не запуская код, что выведется в консоль:
int num = 1;
void func() {
int num = 2;
}
int main() {
func();
std::cout << num << "\n";
return 0;
}