Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Справочник по С++.doc
Скачиваний:
49
Добавлен:
02.05.2014
Размер:
995.33 Кб
Скачать

R.3.5 Классы памяти

Существует два описываемых класса памяти: автоматический и статический. Автоматические объекты становятся локальными при передаче управления в каждый блок. Статические объекты существуют и сохраняют свое значение во все время выполнения программы. Автоматические объекты инициализируются ($$R.12.1) всякий раз, когда управление переходит в блок, где они определены и уничтожаются ($$R.12.4) по выходе из этого блока ($$R.6.7). Поименованный автоматический объект не должен быть уничтожен до окончания его блока, точно так же, как не может быть исключен поименованный автоматический объект класса, имеющего конструктор или деструктор с побочным эффектом, даже если кажется, что этот объект не используется. Аналогично, глобальный объект класса с конструктором или деструктором, имеющими побочный эффект, не может быть исключен, даже если кажется, что он не используется. Статические объекты инициализируются и уничтожаются в соответствии с описанием в $$R.3.4 и $$R.6.7. С некоторыми объектами не связано никакого имени, см. $$R.5.3.3 и $$R.12.2. Все глобальные объекты имеют класс памяти статический. Локальным объектам и членам класса можно предать класс памяти статический с помощью явного использования спецификации класса памяти static ($$R.7.1.1).

R.3.6 Типы

Существуют два вида типов: основные и производные.

R.3.6.1 Основные типы

Существует несколько основных типов. В стандартном заголовочном файле <limits.h> задаются в зависимости от реализации минимальные и максимальные значения каждого типа. Объекты, описанные как символы (char), могут хранить любой элемент из базового набора символов данной машины. Если символ этого набора хранится в символьной переменной, то ее значение равно целому значению кода этого символа. Символы могут явно описываться как unsigned или signed. Обычный char, signed char и unsigned char являются тремя различными типами. Для всех этих трех типов требуется одинаковый объем памяти. С помощью описаний short int, int и long int можно определить целые трех различных размеров. Для длинных целых требуется памяти не меньше чем для коротких целых, но в реализации или короткие целые, или длинные целые, или и те и другие могут оказаться эквивалентными обычным целым. Обычные целые имеют размер, определяемый системой команд, размеры других целых определяются конкретными потребностями. Для каждого из типов signed char, short, int и long существует соответствующий беззнаковый тип, который занимает тот же объем памяти и удовлетворяет тем же требованиям выравнивания. Требование выравнивание - это ограничение на значение указателя на данный объект, которое накладывает реализация ($$R.5.4). Беззнаковые целые, описанные как unsigned, подчиняются законом арифметики по модулю 2@n, где n число битов, используемое для представления значения. Отсюда следует, что в арифметике беззнаковых не возникает переполнения. Существует три типа с плавающей точкой: float, double и long double. Тип double гарантирует не меньшую точность представления, чем float, а тип long double гарантирует точность не меньше, чем у double. Характеристики основных типов с плавающей точкой определяются в соответствии с реализацией в стандартном заголовочном файле <float.h>. Типы char, int любых размеров и тип перечисления ($$R.7.2) называются целочисленными типами. Целочисленные типы вместе с типами с плавающей точкой образуют арифметические типы. Тип void задает пустое множество значений. Он используется для обозначения типа функций, которые не возвращают результат. Нельзя описывать объекты с типом void. Любое выражение можно явно преобразовать к типу void ($$R.5.4), получившееся выражение можно использовать только как выражение-оператор ($$R.6.2), как левый операнд операции запятая ($$R.5.18) или в качестве второго или третьего операнда в операции ?: ($$R.5.16).