Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
КРАТКИЙ ОБЗОР С.doc
Скачиваний:
1
Добавлен:
26.10.2018
Размер:
2.11 Mб
Скачать

2.1.2 Объекты и адреса

      Можно выделять память для "переменных", не имеющих имен, и       использовать эти переменные.       Возможно даже присваивание таким странно выглядящим "переменным",       например, *p[a+10]=7. Следовательно, есть потребность именовать       "нечто хранящееся в памяти". Можно привести подходящую цитату из       справочного руководства: "Любой объект - это некоторая область       памяти, а адресом называется выражение, ссылающееся на объект или       функцию" ($$R.3.7). Слову адрес (lvalue - left value, т.е. величина       слева) первоначально приписывался смысл "нечто, что может в       присваивании стоять слева". Адрес может ссылаться и на константу       (см. $$2.5). Адрес, который не был описан со спецификацией const,       называется изменяемым адресом.

2.1.3 Время жизни объектов

      Если только программист не вмешается явно, объект будет создан при       появлении его определения и уничтожен, когда исчезнет из       области видимости. Объекты с глобальными именами создаются,       инициализируются (причем только один раз) и существуют до конца       программы. Если локальные объекты описаны со служебным словом       static, то они также существуют до конца программы. Инициализация их       происходит, когда в первый раз управление "проходит через"       описание этих объектов, например:       int a = 1;       void f()       {       int b = 1; // инициализируется при каждом вызове f()       static int c = a; // инициализируется только один раз       cout << " a = " << a++       << " b = " << b++       << " c = " << c++ << '\n';       }       int main()       {       while (a < 4) f();       }       Здесь программа выдаст такой результат:       a = 1 b = 1 c = 1       a = 2 b = 1 c = 2       a = 3 b = 1 c = 3       ''Из примеров этой главы для краткости изложения исключена макрокоманда #include <iostream>. Она нужна лишь в тех из них, которые выдают результат.       Операция "++" является инкрементом, т. е. a++ означает: добавить 1       к переменной a.       Глобальная переменная или локальная переменная static, которая не была       явно инициализирована, инициализируется неявно нулевым значением (#2.4.5).       Используя операции new и delete, программист может создавать       объекты, временем жизни которых он управляет сам (см. $$3.2.6).

2.2 Имена

      Имя (идентификатор) является последовательностью букв или цифр.       Первый символ должен быть буквой. Буквой считается и символ       подчеркивания _. Язык С++ не ограничивает число символов в имени.       Но в реализацию входят программные компоненты, которыми создатель       транслятора управлять не может (например, загрузчик), а они,       к сожалению, могут устанавливать ограничения. Кроме того, некоторые       системные программы, необходимые для выполнения программы на С++, могут       расширять или сужать множество символов, допустимых в идентификаторе.       Расширения (например, использование $ в имени) могут нарушить       переносимость программы. Нельзя использовать в качестве имен       служебные слова С++ (см. $$R.2.4), например:       hello this_is_a_most_unusially_long_name       DEFINED foO bAr u_name HorseSense       var0 var1 CLASS _class ___ Теперь приведем примеры последовательностей символов, которые не могут использоваться как идентификаторы:       012 a fool $sys class 3var       pay.due foo~bar .name if Заглавные и строчные буквы считаются различными, поэтому Count и count - разные имена. Но выбирать имена, почти не отличающиеся друг от друга, неразумно. Все имена, начинающиеся с символа подчеркивания, резервируются для использования в самой реализации или в тех программах, которые выполняются совместно с рабочей, поэтому крайне легкомысленно вставлять такие имена в свою программу.       При разборе программы транслятор всегда стремится выбрать самую длинную последовательность символов, образующих имя, поэтому var10 - это имя, а не идущие подряд имя var и число 10. По той же причине elseif - одно имя (служебное), а не два служебных имени else и if.