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

时间:2013-02-11 22:15:53

标签: c++ types theory

据我所知,基本类型是Scalar和Arrays是聚合的,但是用户定义的类型呢?我将以什么标准将它们分为两类?

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

4 个答案:

答案 0 :(得分:38)

简短版本: 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是(自由)对象类型,则它是指向成员对象的指针,如果是{{1},则指向成员函数的指针是一个(自由)函数类型。

所有类型都是完整的,除了U,未确定的数组和声明但未定义的类和联合。除void之外的所有不完整类型都可以完成。

所有类型都可以void / const限定。

volatile标头提供特征类来检查每种类型特征。

答案 1 :(得分:30)

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

enter image description here

原始文件:
http://howardhinnant.github.io/TypeHiearchy.pdf

标量是一个基础,除非它不能为空,但它可以是指针类型或枚举类型。

一个基础在语言中有一个关键字。这样说的时候很容易识别出来。

答案 2 :(得分:6)

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

  

标量类型是一种类型,它为加法运算符提供内置功能而不会出现重载(算术,指针,成员指针,枚举和std::nullptr_t)。

也是here的表格。

C++ Type Categories

答案 3 :(得分:0)

标量...您喜欢给它,或按括号内的说明进行初始化:
Pulsu Ratfemales={22,0};
或类似功能:
Pulsu Ratfemales(22,0);
最不适合我。