C++ CSS HTML Java JavaScript MySQL Oracle PERL PHP SQL Unix VBScript XHTML XML Сети
Справочное руководство. Имена и Типы.
 
                  

                       4. Имена и Типы

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

                    4.1 Область Видимости

     Есть четыре  вида областей видимости:  локальная,  файл,
программа и класс.

     Локальная: Имя,  описанное в блоке (#9.2),   локально  в
этом блоке   и  может использоваться только в нем после места
описания и в охватываемых блоках. Исключение составляют метки
(#9.12), которые  могут использоваться в любом месте функции,
в которой они описаны.  Имена формальных  параметров  функции
рассматриваются так,    как  если бы они были описаны в самом
внешнем блоке этой функции.

     Файл: Имя,  описанное вне любого блока (#9.2) или класса
(#8.5), может  использоваться в файле, где оно описано, после
места описания.

     Класс: Имя члена класса локально для его класса и  может
использоваться только  в функции члене этого класса (#8.5.2),
после примененной к объекту его класса (#7.1)  операции . или
после примененной   к  указателю  на объект его класса (#7.1)
операции ->.  На статические члены класса (#8.5.1)  и функции
члены можно  также ссылаться с помощью операции ::  там,  где
имя их класса находится в области видимости. Класс, описанный
внутри класса (#8.5.15),  не считается членом, и его имя при-
надлежит охватывающей области видимости.

     Имя может быть скрыто посредством явного  описания  того
же имени   в  блоке или классе.  Имя в блоке или классе может
быть скрыто только именем, описанным в охватываемом блоке или
классе. Скрытое   нелокальное имя также может использоваться,
когда его область видимости указана операцией ::  (#7.1). Имя
класса, скрытое  именем, которое не является именем типа, все
равно может использоваться,   если  перед  ним  стоит  class,
struct или union (#8.2).  Имя перечисления enum, скрытое име-
нем, которое не является именем типа, все равно может исполь-
зоваться, если перед ним стоит enum (#8.2).

                       4.2 Определения

     Описание (#8)  является определением, за исключением тех
случаев, когда  оно описывает функци, не задавая тела функции
(#10), когда оно содержит спецификатор extern (1) и в нем нет
инициализатора или тела функции,  или когда оно является опи-
санием класса (#8.8).

                       4.3 Компоновка

     Имя в файловой области видимости,  не описанное явно как
static, является  общим для каждого файла многофайловой прог-
раммы. Таковым  же является имя функции. О таких именах гово-
рится, что  они внешние.  Каждое описание  внешнего  имени  в
программе относится  к тому же объекту (#5),  функции (#8.7),
классу (#8.5), перечислению (#8.10) или значению перечислите-
ля (#8.10).

     Типы, специфицированные во всех описаниях внешнего имени
должны быть идентичны.  Может быть больше одного  определения
типа, перечисления,   inline-функции (#8.1)  или несоставного
const (#8.2),  при условии, что определения идентичны, пояля-
ются в  разных файлах и все инициализаторы являются констант-
ными выражениями (#12). Во всех остальных случаях должно быть
ровно одно определение для внешнего имени в программе.

      же ограничение может налагаться на inline
-функции.

                      4.4 Классы Памяти

     Есть два  описываемых  класса  памяти:  автоматический и
статический.

     Автоматические объекты локальны для каждого вызова блока
и сбрасываются по выходе из него.

     Статические объекты существуют и сохраняют свое значение
в течение выполнения всей програмы.

     Некоторые объекты не связаны с именами и их времена жиз-
ни явно   управляются  операторами new и delete,  см.  #7.2 и
#9.14

                      4.5 Основные Типы

      равно целому коду этого символа.

     В настоящий момент имеются целые трех размеров, описыва-
емые как short int, int и long int. Более длинные целые (long
int) предоставляют не меньше памяти, чем более короткие целые
(short int), но при реализации или длинные, или короткие, или
и те   и  другие  могут  стать  эквивалентными обычным целым.
"Обычные" целые имеют естественный размер,  задаваемый  архи-
тектурой центральной мащины; остальные размеры делаются таки-
ми, чтобы они отвечали специальным потребностям.

     Каждое перечисление (#8.9)  является набором именованных
констант. Свойства enum идентичны свойствам int.

     Целые без знака,  описываемые как unsigned,  подчиняются
правилам арифметики по модулю 2n,  где n -  число  бит  в  их
представлении.

     Числа с  плавающей  точкой  одинарной (float)  и двойной
(double) точности в некоторых машинных реализациях могут быть
синонимами.

      называться целочисленными типами. Типы float
и double будут собирательно называться плавающими типами.

     Тип данных  void  (пустой)   определяет пустое множество
значений. Значение  (несуществующее)  объекта void нельзя ис-
пользовать никаким образом, не могут применяться ни явное, ни
неявное преобразования. Поскольку пустое выражение обозначает
несуществующее значение,  такое выражение такое выражение мо-
жет использоваться только как оператор выражение (#9.1)   или
как левый   операнд в выражении с запятой (#7.15).  Выражение
может явно преобразовываться к типу void (#7.2).

                    4.6 Производные Типы

     Кроме основных арифметических  типов  концептуально  су-
ществует бесконечно много производных типов,  сконструирован-
ных из основных типов следующим образом:

     массивы объектов данного типа;

     функции, получающие аргументы данного типа и  возвращаю-
     щие объекты данного типа;

     указатели на объекты данного типа;

     ссылки на объекты данного типа;

     константы, являющиеся значениями данного типа;

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

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

     В целом  эти способы конструирования объектов могут при-
меняться рекурсивно.

     Объект типа void* (указатель на void) можно использовать
для указания на объекты неизвестного типа.

[Назад] [Содержание] [Вперед]

Главная