типы — Что такое скалярный объект в C ++?

Насколько я понимаю, фундаментальные типы — это Scalar, а массивы — агрегированные, но как насчет пользовательских типов? По каким критериям я бы разделил их на две категории?

struct S { int i; int j };
class C { public: S s1_; S s2_ };
std::vector<int> V;
std::vector<int> *pV = &v;

23

Решение

Укороченная версия: Типы в C ++:

  • Типы объектов: скаляры, массивы, классы, объединения

  • Типы ссылок

  • Типы функций

  • (Типы членов) [см. Ниже]

  • void


Длинная версия

  • Типы объектов

    • Скаляры

      1. арифметическое (целое, плавающее)

      2. указатели: T * для любого типа T

      3. перечисление

      4. указатель на член

      5. nullptr_t

    • Массивы: T[] или же T[N] для любого полного не ссылочного типа T

    • Классы: class Foo или же struct Bar

      1. Тривиальные занятия

      2. сводные показатели

      3. POD классы

      4. (и т. д. и т. д.)

    • Союзы: union Zip

  • Типы литературы: T &, T && для любого объекта или типа свободной функции T

  • Типы функций

    • Бесплатные функции: R foo(Arg1, Arg2, ...)

    • Функции-члены: R T::foo(Arg1, Arg2, ...)

  • void

Типы членов работают так. Тип члена имеет форму T::U, но вы не можете иметь объекты или переменные типа члена. Вы можете иметь только участника указатели. Указатель на член имеет тип T::* Uи это указатель на член-объект, если U является (свободным) типом объекта, и указатель на член-функцию, если U является (свободным) типом функции.

Все типы завершены, кроме void, нестандартные массивы и объявленные, но не определенные классы и объединения. Все неполные типы, кроме void может быть завершено.

Все типы могут быть const/volatile Квалифицированный.

<type_traits> Заголовок предоставляет классы признаков для проверки каждой из этих характеристик типа.

35

Другие решения

Я думаю, что это был бы более полный ответ:

введите описание изображения здесь

оригинальный документ:
http://howardhinnant.github.io/TypeHiearchy.pdf

скаляр является фундаментальным, за исключением того, что он не может быть пустым, но это может быть тип указателя или тип enum.

А также фундаментальный имеет ключевое слово в языке. это легко узнать, когда так сказано.

30

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

скалярный тип это тип, который имеет встроенную функциональность для оператора сложения без перегрузок (арифметика, указатель, указатель на член, перечисление и std::nullptr_t).

Также стол из Вот.

Типы C ++ Категории

6
По вопросам рекламы [email protected]