私が理解している限り、基本的な型はスカラーであり、配列は集合体ですが、ユーザー定義型はどうですか?どのような基準でそれらを2つのカテゴリに分類しますか?
struct S { int i; int j };
class C { public: S s1_; S s2_ };
std::vector<int> V;
std::vector<int> *pV = &v;
短いバージョン: C++のタイプは次のとおりです。
オブジェクトタイプ:スカラー、配列、クラス、ユニオン
参照型
関数型
(会員タイプ)[下記参照]
void
ロングバージョン
オブジェクトタイプ
スカラー
算術(積分、浮動小数点)
ポインタ:T *
任意のタイプT
列挙型
メンバーへのポインタ
nullptr_t
配列:T[]
またはT[N]
完全な非参照型の場合T
クラス:class Foo
またはstruct Bar
ささいなクラス
骨材
PODクラス
(など)
ユニオン: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>
特性クラスを提供します。
これはもっと包括的な答えになると思います:
元のドキュメント: http:
//howardhinnant.github.io/TypeHiearchy.pdf
スカラーは、voidにすることはできないことを除いて基本ですが、ポインター型または列挙型にすることができます。
そして、ファンダメンタルズには言語のキーワードがあります。そのように言われるとわかりやすいです。
変数のタイプをテストするために使用される一連のライブラリクラスがあります。 std::is_scalar
オブジェクトがスカラーであるかどうかをテストするために使用できます。
スカラー型は、オーバーロードのない加算演算子(算術、ポインター、メンバーポインター、列挙型、および)の機能が組み込まれている型です
std::nullptr_t
。
こちらからの表も。