Фундаментальные типы
(См. также список утилит, предоставляемых C++ для работы с типами.)
Содержание |
[править] Логический тип
- bool — тип, способный хранить одно из двух значений: true (истина) или false (ложь).
[править] Символьные типы
- signed char — тип для знакового представления символов.
- unsigned char — тип для беззнакового представления символов.
- char — тип для представления символов, который может наиболее эффективно обрабатываться в целевой системе (эквивалентный signed char или unsigned char, но всё же отличный от них тип).
- wchar_t — тип для широкого представления символов.
- char16_t — тип для представления символов в UTF-16. (начиная с C++11)
- char32_t — тип для представления символов в UTF-32. (начиная с C++11)
[править] Целочисленные типы
- int — базовый целочисленный тип. Может быть опущен, если представлен любой из модификаторов. Если не представлен ни один из модификаторов размера, гарантировано имеет ширину не меньше 16 бит. Тем не менее, на 32/64-битных системах почти всегда имеет ширину не меньше 32 бит (см. ниже).
[править] Модификаторы
Модифицируют целочисленный тип. Могут располагаться в любом порядке. Только один модификатор из каждой группы может быть представлен в имени типа.
Знаковость
- signed — целевой тип будет иметь знаковое представление (по умолчанию, если не представлен ни один из вариантов).
- unsigned — целевой тип будет иметь беззнаковое представление.
Размер
- short — целевой тип будет оптимизирован по размеру и иметь ширину не меньше 16 бит.
- long — целевой тип будет иметь ширину не меньше 32 бит.
- long long — целевой тип будет иметь ширину не меньше 64 бит. (начиная с C++11)
[править] Свойства
Данная таблица обобщает все доступные целочисленные типы и их свойства:
| Спецификатор типа | Эквивалентный тип | Ширина в битах согласно модели данных | ||||
|---|---|---|---|---|---|---|
| Стандарт C++ | LP32 | ILP32 | LLP64 | LP64 | ||
| short
|
short int | не меньше чем 16 |
16 | 16 | 16 | 16 |
| short int
| ||||||
| signed short
| ||||||
| signed short int
| ||||||
| unsigned short
|
unsigned short int | |||||
| unsigned short int
| ||||||
| int
|
int | не меньше чем 16 |
16 | 32 | 32 | 32 |
| signed
| ||||||
| signed int
| ||||||
| unsigned
|
unsigned int | |||||
| unsigned int
| ||||||
| long
|
long int | не меньше чем 32 |
32 | 32 | 32 | 64 |
| long int
| ||||||
| signed long
| ||||||
| signed long int
| ||||||
| unsigned long
|
unsigned long int | |||||
| unsigned long int
| ||||||
| long long
|
long long int (C++11) |
не меньше чем 64 |
64 | 64 | 64 | 64 |
| long long int
| ||||||
| signed long long
| ||||||
| signed long long int
| ||||||
| unsigned long long
|
unsigned long long int (C++11) | |||||
| unsigned long long int
| ||||||
Кроме минимального размера в битах стандарт C++ гарантирует, что
- 1 == sizeof(char) <= sizeof(short) <= sizeof(int) <= sizeof(long) <= sizeof(long long).
Примечание: возможен крайний случай, в котором байты имеют размер 64 бита, все типы (включая char) имеет ширину 64 бита, и sizeof возвращает 1 для всех типов.
Примечание: целочисленная арифметика определяется по-разному для знаковых и беззнаковых целочисленных типов. См. арифметические операторы, в частности целочисленное переполнение.
[править] Модели данных
Выборы размеров фундаментальных типов в каждой реализации в совокупности называются моделью данных. Широкое применение нашли 4 модели данных:
32-битные системы:
- LP32 или 2/4/4 (int — 16 бит, long и указатель — 32 бита)
- Win16 API
- ILP32 или 4/4/4 (int, long и указатель — 32 бита)
- Win32 API
- Unix и Unix-подобные системы (Linux, Mac OS X)
64-битные системы:
- LLP64 или 4/4/8 (int и long — 32 бита, указатель — 64 бита)
- Win64 API
- LP64 или 4/8/8 (int — 32 бита, long и указатель — 64 бита)
- Unix и Unix-подобные системы (Linux, Mac OS X)
Другие модели очень редки. Например, ILP64 (8/8/8: int, long и указатель — 64 бита) появилась только в некоторых ранних 64-битных Unix-системах (н-р, Unicos на компьютерах Cray).
[править] Типы с плавающей точкой
- float — тип с плавающей точкой одинарной точности. Обычно 32-битный тип с плавающей точкой формата IEEE-754
- double — тип с плавающей точкой двойной точности. Обычно 64-битный тип с плавающей точкой формата IEEE-754
- long double — тип с плавающей точкой повышенной точности. Не обязательно отображается на типы IEEE-754. Обычно 80-битный тип с плавающей точкой формата x87 на архитектурах x86 и x86-64.
[править] Промежутки значений
Данная таблица содержит предельные значения наиболее распространнёных числовых форматов. Так как Стандарт C++ разрешает любое представление знаковых целых чисел, в таблице присутствуют как минимальные гарантируемые ограничения (соответствующие пределам обратного кода или прямого кода), так и пределы наиболее используемой реализации — дополнительного кода. Тем не менее, все популярные модели данных (включая все из ILP32, LP32, LP64, LLP64) используют представление в дополнительном коде.
| Тип | Размер в битах | Формат | Промежуток значений | |
|---|---|---|---|---|
| Приблизительный | Точный | |||
| символьный | 8 | знаковый (обратный код) |
от -127 до 127 | |
| знаковый (дополнительный код) |
от -128 до 127 | |||
| беззнаковый | от 0 до 255 | |||
| целочисленный | 16 | знаковый (обратный код) |
± 3,27 · 104 | от -32767 до 32767 |
| знаковый (дополнительный код) |
от -32768 до 32767 | |||
| беззнаковый | от 0 до 6,55 · 104 | от 0 до 65535 | ||
| 32 | знаковый (обратный код) |
± 2,14 · 109 | от -2147483647 до 2147483647 | |
| знаковый (дополнительный код) |
от -2147483648 до 2147483647 | |||
| беззнаковый | от 0 до 4,29 · 109 | от 0 до 4294967295 | ||
| 64 | знаковый (обратный код) |
± 9,22 · 1018 | от -9223372036854775807 до 9223372036854775807 | |
| знаковый (дополнительный код) |
от -9223372036854775808 до 9223372036854775807 | |||
| беззнаковый | от 0 до 1,84 · 1019 | от 0 до 18446744073709551615 | ||
| с плавающей точкой |
32 | IEEE-754 | ± 3,4 · 10± 38 (~7 цифр) |
|
| 64 | IEEE-754 | ± 1,7 · 10± 308 (~15 цифр) |
| |
[править] Ключевые слова
bool, true, false, char, wchar_t, char16_t, char32_t, int, short, long, signed, unsigned, float, double
[править] См. также

