Все Типы данных с++

243
08 января 2018, 10:37

Какие есть типы данных в С++? Кто мог бы логически расставить по местам? Есть стандартные типы (int, double...), пользовательские типы класса и агрегатные (структуры). Верно? Исправьте меня пожалуйста

Answer 1

Классификаций типов данных в С++ много разных и они не выстраиваются в одну иерархию, а накладываются друг на друга, пересекаются друг с другом и заимствуют друг у друга, т.е. являются альтернативными способами подразбиения одних и тех же типов по разным критериям.

Самая разветвленная иерархия классификации типов имеет вид

  • Деление на фундаментальные типы и составные типы (fundamental types and compound types).
    • Фундаментальные типы в свою очередь делятся на арифметические, void и std::nullptr_t.
      Арифметические делятся на целочисленные и плавающие.
      Целочисленные делятся на знаковые, беззнаковые, char, wchar_t и bool.
    • Составные типы в свою очередь делятся на массивы, функции, указатели, ссылки, классы, объединения, перечисления и указатели на члены классов.
      Классы могут быть полиморфными или абстрактными (или не быть таковыми).
      Перечисления могут быть scoped или unscoped

Однако независимо от вышеприведенной классификации существуют следующие независимые классификации (не претендуя на полноту)

  • Объектные типы и типы не являющиеся таковыми
  • Агрегатные типы и типы не являющиеся таковыми
  • POD типы и типы не являющиеся таковыми
  • Буквальные (literal) типы и типы не являющиеся таковыми
  • Тривиальные типы и типы не являющиеся таковыми
  • Типы стандартного расположения (standard layout) и типы не являющиеся таковыми
  • Полные типы и неполные типы (сomplete and incomplete types)
  • Стандартные типы и пользовательские типы (user-defined types)
  • ...

Например, нельзя говорить, что агрегатные типы являются подмножеством класс-типов, ибо любой массив С++ (независимо от типа элемента) является агрегатным типом.

Answer 2

Типы бывают фундаментальными (базовыми) и составными.

Объектный тип - это тип, который не является ни функциональным типом, ни ссылочным, ни пустым (void).

Арифметические типы, перечисляемые типы, указательные типы, указатели на члены класса, std::nullptr_t и их cv-квалифицированные версии называются скалярными типами.

Типы бывают тривиально копируемыми. К этим типам относятся скалярные типы без cv-квалификации, тривиально-копируемые классовые типы, массивы объектов таких типов, non-volatile const версии этих типов (для C++17 могут быть cv-квалифицированными).

Типы бывают тривиальными, к ним относятся скалярные типы, тривиальные классовые типы, массивы объектов таких типов, cv-квалифицируемые версии этих типов.

Скалярные типы, POD-классы, массивы объектов POD-типов, cv-квалифицируемые версии этих типов называются POD-типами.

Скалярные типы, классовые типы со стандартной компоновкой, массивы таких типов, cv-квалифицируемые версии этих типов называются типами со стандартной компоновкой.

Тип считается литеральным если он:

    • void (возможно, с cv-квалификацией)
    • скалярный тип, ссылочный тип
    • массив элементов литерального типа
    • классовый тип (с cv-квалификацией или без нее), который удовлетворяет всем требованиям ниже:
      • имеет тривиальный деструктор
      • является агрегатным типом, или имеет хотя бы один constexpr-конструктор или шаблонный конструктор, не являющиеся конструктором копирования или перемещения.
      • все нестатические данные и базовые классы являются литеральными типами и они non-volatile.

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

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, знаковые и беззнаковые целочисленные типы называются целочисленными типами.

Целочисленные и плавающие типы называются арифметическими типами.

Составные типы:

К составным типам относятся

    • массивы;
    • тип функции, которые имеют параметры данных типов и возвращают void или ссылки, или объекты такого типа;
    • указатели на void, объекты, функции (включая статические члены классов);
    • ссылки на объекты и функции данного типа;
    • классы;
    • объединения;
    • перечисления;
    • указатели на не статические члены класса;
Тип указателей на void или на объектный тип называется указателем на объектный тип.

Тип указателя, способного "указывать" на функции называется типом указателя на функцию.

Типы могут быть cv-квалифицированными. Это типы, имеющие const и/или volatile квалификацию. И называются, соответственно, const-квалифицированными, volatile-квалифицированными или const-volatile-квалифицированными.

Классовые типы:

Тривиально копируемые классовые типы, это классовые типы, которые не имеют не тривиальных копирующих и перемещающих конструкторов и не тривиальных операторов присваивания (копирующих и перемещающих), и имеют тривиальный деструктор.

Классовый тип является тривиальным классовым типом, если он имеет конструктор по-умолчанию, не имеет не тривиальных конструкторов и является тривиально копируемым.

POD-структура - класс, который не является объединением, является тривиальным классом и классом со стандартной компоновкой, и не содержит нестатических данных non-POD (не-POD) структур и non-POD-объединений.

POD-объединение - объединение, которое является тривиальным классом и классом со стандартной компоновкой, и не содержит нестатических данных non-POD-структур и non-POD-объединений.

POD-класс - класс, который является либо POD-структурой, либо POD-объединением.

Агрегатные типы:

Это массивы или классы без конструкторов определенных пользователем, без приватных и защищенных нестатических данных, без базовых классов и без виртуальных функций.




Конечно же, это далеко не всё, что касается типов, да и не уверен в стопроцентной правильности своего перевода терминов. Подробнее обо всём можно узнать в стандарте языка.

READ ALSO
Permission's для чтения файлов других приложений в /data/data/%appname%

Permission's для чтения файлов других приложений в /data/data/%appname%

Ребята, может кто знает, какие в android нужны permissions для чтения файлов других приложений в /data/data/%appname% ?

209
Составить json из text.txt

Составить json из text.txt

ЗдравствуйтеНужна помощь

417
Картинки в GridView

Картинки в GridView

Пытаюсь освоить Android Studio, поставил себе задачу реализовать приложение, которое бы брало с сервера JSON файл и выводило бы из него данные

251
Сравнения строк в Ява [дубликат]

Сравнения строк в Ява [дубликат]

На данный вопрос уже ответили:

244