Пространства имён
Варианты
Действия

Фундаментальные типы

Материал из cppreference.com
< cpp‎ | language
 
 
Язык С++
Общие темы
Управление программой
Операторы условного выполнения
Операторы повторения
Операторы перехода
Функции
объявление функции
объявление лямбда-функции
шаблон функции
спецификатор inline
спецификаторы исключений (устарело)
спецификатор noexcept (C++11)
Исключения
Пространства имён
объявление пространства имён
псевдонимы пространства имён
Типы
спецификатор decltype (C++11)
Спецификаторы
cv-спецификаторы
спецификаторы продолжительности хранения
спецификатор constexpr (C++11)
спецификатор auto (C++11)
спецификатор alignas (C++11)
Инициализация
Литералы
Выражения
Утилиты
Типы
typedef-объявление
объявление псевдонима типа (C++11)
атрибуты (C++11)
Приведения типов
неявные преобразования
const_cast-преобразование
static_cast-преобразование
dynamic_cast-преобразование
reinterpret_cast-преобразование
C-подобное и функциональное приведение типов
Выделение памяти
Классы
Особые свойства классовых функций
Специальные функции-члены
Шаблоны
шаблон класса
шаблон функции
специализация шаблона
упакованные параметры (C++11)
Разное
Ассемблерные вставки
 

(См. также список утилит, предоставляемых 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 цифр)
  • мин. денормализованное:
    ± 1,4012984 · 10-47
  • мин. нормализованное:
    ± 1,1754943 · 10-38
  • макс.:
    ± 3,4028234 · 1038
64 IEEE-754 ± 1,7 · 10± 308
(~15 цифр)
  • мин. денормализованное:
    ± 4,940656458412 · 10-324
  • мин. нормализованное:
    ± 2,2250738585072014 · 10-308
  • макс.:
    ± 1,7976931348623157 · 10308

[править] Ключевые слова

bool, true, false, char, wchar_t, char16_t, char32_t, int, short, long, signed, unsigned, float, double

[править] См. также