×
Traktatov.net » Язык программирования C++. Пятое издание » Читать онлайн
Страница 41 из 714 Настройки
Упражнения раздела 2.2.3

Упражнение 2.12. Какие из приведенных ниже имен недопустимы (если таковые есть)?

>(a) int double = 3.14; (b) int _;

>(с) int catch-22;      (d) int 1_or_2 = 1;

>(e) double Double = 3.14;

2.2.4. Область видимости имен

В любом месте программы каждое используемое имя относится к вполне определенной сущности — переменной, функции, типу и т.д. Однако имя может быть использовано многократно для обращения к различным сущностям в разных точках программы.

Область видимости (scope) — это часть программы, в которой у имени есть конкретное значение. Как правило, области видимости в языке С++ разграничиваются фигурными скобками.

В разных областях видимости то же имя может относиться к разным сущностям. Имена видимы от момента их объявления и до конца области видимости, в которой они объявлены.

В качестве примера рассмотрим программу из раздела 1.4.2:

>#include

>int main() {

> int sum = 0;

> // сложить числа от 1 до 10 включительно

> for (int val = 1; val <= 10; ++val)

>  sum += val; // эквивалентно sum = sum + val

>  std::cout << "Sum of 1 to 10 inclusive is "

>            << sum << std::endl;

> return 0;

>}

Эта программа определяет три имени — >main, >sum и >val, а также использует имя пространства имен >std, наряду с двумя именами из этого пространства имен — >cout и >endl.

Имя >main определено вне фигурных скобок. Оно, как и большинство имен, определенных вне функции, имеет глобальную область видимости (global scope). Будучи объявлены, имена в глобальной области видимости доступны в программе повсюду. Имя >sum определено в пределах блока, которым является тело функции >main(). Оно доступно от момента объявления и далее в остальной части функции >main(), но не за ее пределами. Переменная >sum имеет область видимости блока (block scope). Имя >val определяется в пределах оператора >for. Оно применимо только в этом операторе, но не в другом месте функции >main().

Совет. Определяйте переменные при первом использовании

Объект имеет смысл определять поближе к месту его первого использования. Это улучшает удобочитаемость и облегчает поиск определения переменной. Однако важней всего то, что когда переменная определяется ближе к месту ее первого использования, зачастую проще присвоить ей подходящее исходное значение.

Вложенные области видимости

Области видимости могут содержать другие области видимости. Содержащаяся (или вложенная) область видимости называется внутренней областью видимости (inner scope), а содержащая ее области видимости — внешней областью видимости (outer scope).

Как только имя объявлено в области видимости, оно становится доступно во вложенных в нее областях видимости. Имена, объявленные во внешней области видимости, могут быть также переопределены во внутренней области видимости:

>#include

>// Программа предназначена исключительно для демонстрации.

>// Использование в функции глобальной переменной, а также определение

>// одноименной локальной переменной - это очень плохой стиль

>// программирования

>int reused = 42; // reused имеет глобальную область видимости

>int main()