- •Глава 4 функции
- •Параметры и аргументы функций
- •Аргументы по умолчанию
- •Области видимости. Локальные и глобальные переменные
- •Операция ::
- •Классы памяти
- •Автоматические переменные
- •Регистровые переменные
- •Внешние переменные и функции
- •Статические переменные
- •Переменные класса volatile
- •Volatile short sTest; volatile const int vciTest;
- •Новый стиль заголовков
- •Пространства имен
- •Встраиваемые (inline-) функции
- •Рекурсивные функции
- •Математические функции
- •Inline double sqr(double X) {return pow(X, 2);}
- •Функции округления
Операция ::
Как было показано выше, объявление локальной переменной скрывает глобальную переменную с таким же именем. Таким образом, все обращения к имени глобальной переменной в пределах области действия локального объявления вызывают обращение к локальной переменной. Однако C++ позволяет обращаться к глобальной переменной из любого места программы с помощью использования операции разрешения области видимости. Для этого перед именем переменное ставится префикс в виде двойного двоеточия (: :):
#include <iostream.h>
// Объявление глобальной переменной
int Turn =5;
int main ()
{
// Объявление локальной переменной
int Turn = 70;
// Вывод локального значения: cout « Turn « ' \n';
// Вывод глобального значения: cout « ::Turn « '\n';
return 0;
}
В результате в две строки будет выведено два значения: 5и 70.
Из рассмотренного примера видно, что были объявлены глобальная и локальная переменные с именем Turn, которые позже были выведены на печать.
Классы памяти
В главе 1 уже упоминалось о таком важном свойстве переменной, как время жизни. Существует четыре модификатора переменных, определяющих область видимости и время действия переменных. Все они приводятся в. таблице 4.1.
Таблица 4.1. Модификаторы переменных
Модификатор |
Применение |
Область действия |
Время жизни |
auto |
локальное |
Блок |
временное |
register |
локальное |
Блок |
временное |
extern |
глобальное |
Блок |
временное |
static |
локальное |
Блок |
постоянное |
глобальное |
Файл |
| |
volatile |
глобальное |
Файл |
постоянное |
Ниже будет рассмотрен более подробно каждый ит приведенных классов памяти.
Автоматические переменные
Модификатор auto используется при описании локальных переменных. Поскольку для локальных переменных данный модификатор используется по умолчанию, на практике его чаще всего опускают.
#include <iostream.h>
int main ()
{
auto int MyVar = 2;
// то же что int MyVar = 2;
cout « MyVar;
return 0;
}
Модификатор auto применяется только к локальным переменным, которые видны только в блоке, в котором они объявлены. При выходе из блока такие переменные уничтожаются автоматически.
Регистровые переменные
Модификатор register предписывает компилятору попытаться разместить указанную переменную в регистрах процессора. Если такая попытка оканчивается неудачно, переменная ведет себя как локальная переменная типа auto. Размещение переменных в регистрах, оптимизирует программный код по скорости, так как процессор оперирует с переменными, находящимися в регистрах, гораздо быстрее, чем с памятью. Но в связи с тем, что число регистров процессора ограничено, количество таких переменных может быть очень небольшим.
#include <iostream.h>
int main ()
{
register int REG;
...
return 0;
}
Модификатор register применяют только к локальным переменным. Попытка употребления данного модификатора (так же как и модификатора auto) к глобальным переменным вызовет сообщение об ошибке. Переменная существует только в пределах блока, содержащего ее объявление.