C++ Область видимости переменных
Вообще говоря, есть три места, где можно определить переменные:
Переменные, объявленные внутри функции или блока кода, называютсялокальными переменными。
Переменные, объявленные в определении параметров функции, называютсяформальными параметрами。
Переменные, объявленные вне всех функций, называютсяглобальными переменными。
Область видимости — это область программы. Область видимости переменных можно разделить на следующие типы:
Локальная область видимости: Переменные, объявленные внутри функции, имеют локальную область видимости; доступ к ним возможен только внутри функции. Локальные переменные создаются при каждом вызове функции и уничтожаются после завершения выполнения функции.
Глобальная область видимости: Переменные, объявленные вне всех функций и блоков кода, имеют глобальную область видимости; доступ к ним может получить любая функция в программе. Глобальные переменные создаются при запуске программы и уничтожаются при завершении программы.
Блочная область видимости: Переменные, объявленные внутри блока кода, имеют блочную область видимости; доступ к ним возможен только внутри блока кода. Переменные с блочной областью видимости создаются каждый раз при выполнении блока кода и уничтожаются после завершения выполнения блока кода.
Область видимости класса: Переменные, объявленные внутри класса, имеют область видимости класса; доступ к ним могут получить все функции-члены класса. Время жизни переменных области видимости класса совпадает со временем жизни класса.
Примечание:Если переменная, объявленная во внутренней области видимости, имеет то же имя, что и переменная во внешней области видимости, переменная во внутренней области видимости перекроет переменную во внешней области видимости.
Локальные переменные
Переменные, объявленные внутри функции или блока кода, называются локальными переменными. Они могут использоваться только операторами внутри функции или блока кода. В следующем примере используются локальные переменные:
Пример
Глобальные переменные
Переменные, определённые вне всех функций (обычно в начале программы), называются глобальными переменными. Значения глобальных переменных действительны на протяжении всего времени жизни программы.
Глобальные переменные доступны любой функции. То есть после объявления глобальной переменной она доступна во всей программе. В следующем примере используются глобальные и локальные переменные:
Пример
В программе локальные и глобальные переменные могут иметь одно и то же имя, но внутри функции значение локальной переменной перекрывает значение глобальной переменной. Вот пример:
Пример
Когда приведенный выше код скомпилирован и выполнен, он выдает следующие результаты:
10
Инициализация локальных и глобальных переменных
При определении локальной переменной система не инициализирует её; её нужно инициализировать самостоятельно. При определении глобальной переменной система автоматически инициализирует её следующими значениями:
| Типы данных | Инициализация значений по умолчанию |
|---|---|
| int | 0 |
| char | '\0' |
| float | 0 |
| double | 0 |
| указатель | NULL |
Правильная инициализация переменных — хорошая практика программирования; в противном случае программа в некоторых случаях может выдавать неожиданные результаты.
Область видимости блока относится к переменным, объявленным внутри блока кода:
Пример
int main() {
int a = 10;
{
int a = 20; // переменная блочной области видимости
std::cout << "Переменная блока: " << a << std::endl;
}
std::cout << "Внешняя переменная: " << a << std::endl;
return 0;
}
В приведённом выше примере переменная с именем a объявлена во внутреннем блоке кода и имеет то же имя, что и переменная a во внешней области видимости. Переменная a во внутренней области видимости перекрывает переменную a во внешней области видимости. При обращении к a во внутренней области видимости выводится 20, а при обращении к a во внешней области видимости выводится 10.
Когда приведенный выше код скомпилирован и выполнен, он выдает следующие результаты:
块变量: 20 外部变量: 10
Область видимости класса
Область видимости класса относится к переменным, объявленным внутри класса:
Пример
class MyClass {
public:
static int class_var; // переменная области видимости класса
};
int MyClass::class_var = 30;
int main() {
std::cout << "Переменная класса: " << MyClass::class_var << std::endl;
return 0;
}
В приведённом выше примере переменная с областью видимости класса с именем class_var объявлена в классе MyClass. Вы можете использовать имя класса и оператор разрешения области видимости::для доступа к этой переменной. При доступе к class_var в функции main() выводится 30.
类变量: 30Другие расширения