什么是C++中的标量对象?

问题描述:

据我了解,基本类型是标量和数组是聚合的,但用户定义的类型呢?按照什么标准将他们分成两类?什么是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

短版:类型在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>标头提供特征类来检查这些类型特征中的每一个。

我认为这将是一个比较全面的答案:

enter image description here

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

标是一个根本不同的是它不能是空的,但它可以是一个指针类型或枚举类型。

根本上有一个关键字在语言。当这样说的时候很容易识别。

有一系列库类用于测试变量的类型。可以使用std::is_scalar来测试对象是否是标量。

标量类型是已经内置功能的加法运算符不重载(算术,指针,指针构件,枚举和std::nullptr_t)一个类型。

也是从here的表。

C++ Type Categories