Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Справочное руководство по C++.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
2.03 Mб
Скачать

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).