Нюансы области видимости в условиях в C++
Область видимости переменных обладает некоторым
нюансом. Давайте рассмотрим его на примере.
Давайте объявим снаружи нашего условия переменную
res с одним значением, а внутри
условия поменяем это значение на другое:
#include <iostream>
int main() {
int res = 1;
if (true) {
res = 2;
}
std::cout << res << "\n"; // выведет 2
return 0;
}
Как вы видите, переменная res поменялась
внутри условия. Все, однако, поменяется,
если внутри условия также объявить переменную
res:
#include <iostream>
int main() {
int res = 1;
if (true) {
int res = 2; // объявим переменную заново
}
std::cout << res << "\n"; // выведет 1, а не 2
return 0;
}
Здесь все дело в том, что объявление переменной
внутри условия создало локальную
переменную res.
То есть внутри условия существует одна переменная
res, а снаружи условия - другая.
Убедиться в этом можно, выведя значение переменной
в консоль внутри условия:
#include <iostream>
int main() {
int res = 1;
if (true) {
int res = 2;
std::cout << res << "\n"; // выведет 2
}
std::cout << res << "\n"; // выведет 1
return 0;
}
Автор приведенного ниже кода хотел выполнить
проверку возраста на достижение 18
лет. Код, однако, не записывает значение
во внешнюю переменную adult.
Исправьте ошибку автора кода. Вот проблемный код:
int age = 17;
bool adult;
if (age >= 18) {
bool adult = true;
} else {
bool adult = false;
}
std::cout << adult << "\n";
Автор приведенного ниже кода хотел выполнить
проверку возраста на достижение 18
лет. После проверки кода оказалось, что если
возраст равен или больше 18 лет, то
в переменную adult записывается истина,
как и должно быть, однако, если возраст меньше
18, то внешняя переменная adult
не получает значение. Исправьте ошибку
автора кода.
Вот проблемный код:
int age = 17;
bool adult;
if (age >= 18) {
adult = true;
} else {
bool adult = false;
}
std::cout << adult << "\n";
Автор приведенного ниже кода хотел выполнить
проверку возраста. Код, однако, не записывает
строку во внешнюю переменную res.
Исправьте ошибку автора кода.
Вот проблемный код:
int age = 17;
std::string res;
if (age >= 18) {
if (age <= 23) {
std::string res = "от 18 до 23";
} else {
std::string res = "больше 23";
}
} else {
std::string res = "меньше 18";
}
std::cout << res << "\n";
Автор приведенного ниже кода хотел выполнить
проверку возраста. Код, однако, при значении
возраста большим 18 лет не выводит
нужную строку. Исправьте ошибку автора кода.
Вот проблемный код:
int age = 19;
std::string res;
if (age >= 18) {
std::string res;
if (age <= 23) {
res = "от 18 до 23";
} else {
res = "больше 23";
}
} else {
res = "меньше 18";
}
std::cout << res << "\n";