2013-02-11 47 views
19

據我瞭解,基本類型是標量和數組是聚合的,但用戶定義的類型呢?按照什麼標準將他們分成兩類?什麼是C++中的標量對象?

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

我想你可能想,如果你想 – tletnes 2013-02-11 22:19:23

+0

你的意思是「類型」有用的答案和「聚合」來清理你的入門款的拼寫和語法,並可能expanind一下就可以了? – us2012 2013-02-11 22:19:36

+2

@ us2012:「Tapes and Arrogates」應該是獨立的大學樂隊。 – 2013-02-11 22:36:27

回答

29

短版:類型在C++有:

  • 對象類型:標量,數組,類,工會

  • 引用類型

  • 函數類型

  • (會員類型)[見下文]

  • void


龍版

  • 對象類型

    • 標量

      1. 算術(積分,浮點)

      2. 指針:T *對於任何類型的T

      3. 枚舉

      4. 指針到構件

      5. nullptr_t

    • 陣列:T[]T[N]任何完整的,非引用類型T

    • 類:class Foostruct 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>標頭提供特徵類來檢查這些類型特徵中的每一個。

22

我認爲這將是一個比較全面的答案:

enter image description here

原稿:
http://howardhinnant.github.io/TypeHiearchy.pdf

標是一個根本不同的是它不能是空的,但它可以是一個指針類型或枚舉類型。

根本上有一個關鍵字在語言。當這樣說的時候很容易識別。

3

有一系列庫類用於測試變量的類型。可以使用std::is_scalar來測試對象是否是標量。

標量類型是已經內置功能的加法運算符不重載(算術,指針,指針構件,枚舉和std::nullptr_t)一個類型。

也是從here的表。

C++ Type Categories