Какие есть типы данных в С++? Кто мог бы логически расставить по местам? Есть стандартные типы (int, double...), пользовательские типы класса и агрегатные (структуры). Верно? Исправьте меня пожалуйста
Классификаций типов данных в С++ много разных и они не выстраиваются в одну иерархию, а накладываются друг на друга, пересекаются друг с другом и заимствуют друг у друга, т.е. являются альтернативными способами подразбиения одних и тех же типов по разным критериям.
Самая разветвленная иерархия классификации типов имеет вид
void и std::nullptr_t.char, wchar_t и bool.Однако независимо от вышеприведенной классификации существуют следующие независимые классификации (не претендуя на полноту)
Например, нельзя говорить, что агрегатные типы являются подмножеством класс-типов, ибо любой массив С++ (независимо от типа элемента) является агрегатным типом.
Типы бывают фундаментальными (базовыми) и составными.
Объектный тип - это тип, который не является ни функциональным типом, ни ссылочным, ни пустым (void).
Арифметические типы, перечисляемые типы, указательные типы, указатели на члены класса, std::nullptr_t и их cv-квалифицированные версии называются скалярными типами.
Типы бывают тривиально копируемыми. К этим типам относятся скалярные типы без cv-квалификации, тривиально-копируемые классовые типы, массивы объектов таких типов, non-volatile const версии этих типов (для C++17 могут быть cv-квалифицированными).
Типы бывают тривиальными, к ним относятся скалярные типы, тривиальные классовые типы, массивы объектов таких типов, cv-квалифицируемые версии этих типов.
Скалярные типы, POD-классы, массивы объектов POD-типов, cv-квалифицируемые версии этих типов называются POD-типами.
Скалярные типы, классовые типы со стандартной компоновкой, массивы таких типов, cv-квалифицируемые версии этих типов называются типами со стандартной компоновкой.
Тип считается литеральным если он:
char, signed char, unsigned char - три разных узких символьных типа.
Числа с плавающей точкой:
Есть три типа с плавающей точкой - float, double, long double.
Знаковые целые типы:
Имеется пять стандартных знаковых целочисленных типа: signed char, short int, int, long int, long long int.
Также могут присутствовать определяемые реализацией расширенные знаковые целые типы.
Беззнаковые целые типы:
Для каждого знакового целоцисленного типа существует соответствующий беззнаковый целочисленный тип.
Стандартные беззнаковые целочисленные типы: unsigned char, unsigned short int, unsigned int, unsigned long int, unsigned long long int.
Также могут присутствовать определяемые реализацией расширенные беззнаковые целые типы.
wchar_t - это отдельный тип, который должен удовлетворять требованиям одного из целочисленных типов. Такой тип называется подлежащим типом.
bool, char, wchar_t, char16_t, char32_t, знаковые и беззнаковые целочисленные типы называются целочисленными типами.
Целочисленные и плавающие типы называются арифметическими типами.
К составным типам относятся
указателем на объектный тип.
Тип указателя, способного "указывать" на функции называется типом указателя на функцию.
Типы могут быть cv-квалифицированными. Это типы, имеющие const и/или volatile квалификацию. И называются, соответственно, const-квалифицированными, volatile-квалифицированными или const-volatile-квалифицированными.
Тривиально копируемые классовые типы, это классовые типы, которые не имеют не тривиальных копирующих и перемещающих конструкторов и не тривиальных операторов присваивания (копирующих и перемещающих), и имеют тривиальный деструктор.
Классовый тип является тривиальным классовым типом, если он имеет конструктор по-умолчанию, не имеет не тривиальных конструкторов и является тривиально копируемым.
POD-структура - класс, который не является объединением, является тривиальным классом и классом со стандартной компоновкой, и не содержит нестатических данных non-POD (не-POD) структур и non-POD-объединений.
POD-объединение - объединение, которое является тривиальным классом и классом со стандартной компоновкой, и не содержит нестатических данных non-POD-структур и non-POD-объединений.
POD-класс - класс, который является либо POD-структурой, либо POD-объединением.
Это массивы или классы без конструкторов определенных пользователем, без приватных и защищенных нестатических данных, без базовых классов и без виртуальных функций.
Конечно же, это далеко не всё, что касается типов, да и не уверен в стопроцентной правильности своего перевода терминов. Подробнее обо всём можно узнать в стандарте языка.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей