Чтение онлайн

на главную

Жанры

Справочное руководство по C++

Страустрап Бьярн

Шрифт:

Вызов функции

void exit(int);

описанной в ‹stdlib.h›, завершает программу. Значение параметра передается окружению программы в качестве результата программы.

Инициализация нелокальных статических объектов (§R.3.5) единицы трансляции происходит прежде первого обращения к функции или объекту, определенному в этой единице трансляции. Эта инициализация (§R.8.4, §R.9.4, §R.12.1, §R.12.6.1) может быть проведена перед выполнением первого оператора main или отложена до любого момента, предшествующего первому использованию функции или объекта,

определенных в данной единице трансляции. Все статические объекты по умолчанию инициализируются нулем (§R.8.4) прежде любой динамической (во времени выполнения программы) инициализации. Больше никаких требований на порядок инициализации объектов из различных единиц трансляции не налагается. Инициализация локальных и статических объектов описана в §R.8.4.

Деструкторы (§R.12.4) для инициализированных статических объектов вызываются при возврате из main или при вызове exit.

Уничтожение происходит в обратном порядке по сравнению с инициализацией. С помощью функции atexit из ‹stdlib.h› можно указать функцию, которую нужно вызывать при выходе из программы. Если было обращение к функции atexit, объекты, инициализированные до вызова atexit, не должны уничтожаться до тех пор, пока не произойдет вызов функции, указанной в atexit. Если реализация C++ сосуществует с реализацией С, все действия, которые должны были произойти после вызова функции, заданной в atexit, происходят только после вызова всех деструкторов.

Вызов функции

void abort;

описанной в ‹stdlib.h›, завершает программу без выполнения деструкторов статических объектов и без вызова функций, заданных в atexit.

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, подчиняются законом арифметики по модулю 2n, где 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).

R.3.6.2 Производные типы

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

массив объектов данного типа, §R.8.4;

функции, имеющие параметры данного типа и возвращающие объекты данного типа, §R.8.2.5;

указатели на объекты или функции данного типа, §R.8.2.1;

ссылки на объекты или функции данного типа, §R.8.2.2;

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

Поделиться:
Популярные книги

Наследник Четырех

Вяч Павел
5. Игра топа
Фантастика:
героическая фантастика
рпг
6.75
рейтинг книги
Наследник Четырех

Адъютант

Демиров Леонид
2. Мания крафта
Фантастика:
фэнтези
6.43
рейтинг книги
Адъютант

Возвышение Меркурия. Книга 7

Кронос Александр
7. Меркурий
Фантастика:
героическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Возвышение Меркурия. Книга 7

Приручитель женщин-монстров. Том 1

Дорничев Дмитрий
1. Покемоны? Какие покемоны?
Фантастика:
юмористическое фэнтези
аниме
5.00
рейтинг книги
Приручитель женщин-монстров. Том 1

Лорд Системы 4

Токсик Саша
4. Лорд Системы
Фантастика:
фэнтези
попаданцы
рпг
5.00
рейтинг книги
Лорд Системы 4

Возвышение Меркурия. Книга 2

Кронос Александр
2. Меркурий
Фантастика:
фэнтези
5.00
рейтинг книги
Возвышение Меркурия. Книга 2

Прометей: каменный век II

Рави Ивар
2. Прометей
Фантастика:
альтернативная история
7.40
рейтинг книги
Прометей: каменный век II

На границе империй. Том 10. Часть 3

INDIGO
Вселенная EVE Online
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 10. Часть 3

6 Секретов мисс Недотроги

Суббота Светлана
2. Мисс Недотрога
Любовные романы:
любовно-фантастические романы
эро литература
7.34
рейтинг книги
6 Секретов мисс Недотроги

Неудержимый. Книга XIII

Боярский Андрей
13. Неудержимый
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Неудержимый. Книга XIII

Вернуть невесту. Ловушка для попаданки

Ардова Алиса
1. Вернуть невесту
Любовные романы:
любовно-фантастические романы
8.49
рейтинг книги
Вернуть невесту. Ловушка для попаданки

На руинах Мальрока

Каменистый Артем
2. Девятый
Фантастика:
боевая фантастика
9.02
рейтинг книги
На руинах Мальрока

Найди меня Шерхан

Тоцка Тала
3. Ямпольские-Демидовы
Любовные романы:
современные любовные романы
короткие любовные романы
7.70
рейтинг книги
Найди меня Шерхан

Табу на вожделение. Мечта профессора

Сладкова Людмила Викторовна
4. Яд первой любви
Любовные романы:
современные любовные романы
5.58
рейтинг книги
Табу на вожделение. Мечта профессора