36

私が理解している限り、基本的な型はスカラーであり、配列は集合体ですが、ユーザー定義型はどうですか?どのような基準でそれらを2つのカテゴリに分類しますか?

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

3 に答える 3

49

短いバージョン: 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場合はメンバーオブジェクトへのポインターであり、が(フリー)関数タイプの場合はメンバー関数へのポインターです。UU

voidサイズのない配列と、宣言されているが定義されていないクラスとユニオンを除いて、すべての型が完全です。を除くすべての不完全なタイプをvoid完了することができます。

すべてのタイプはconst/volatile修飾することができます。

ヘッダーは、これらのタイプ特性のそれぞれをチェックするための<type_traits>特性クラスを提供します。

于 2013-02-11T22:24:16.883 に答える
36

これはもっと包括的な答えになると思います:

ここに画像の説明を入力してください

元のドキュメント: http:
//howardhinnant.github.io/TypeHiearchy.pdf

スカラーは、voidにすることはできないことを除いて基本ですが、ポインター型または列挙型にすることができます。

そして、ファンダメンタルズには言語のキーワードがあります。そのように言われるとわかりやすいです。

于 2015-01-13T02:18:47.493 に答える
7

変数のタイプをテストするために使用される一連のライブラリクラスがあります。 std::is_scalarオブジェクトがスカラーであるかどうかをテストするために使用できます。

スカラー型は、オーバーロードのない加算演算子(算術、ポインター、メンバーポインター、列挙型、および)の機能が組み込まれている型ですstd::nullptr_t

こちらからの表も。

C++タイプのカテゴリ

于 2015-12-25T14:22:57.203 に答える