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

odi*_*erd 26 c++ theory types

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

struct S { int i; int j };
class C { public: S s1_; S s2_ };
std::vector<int> V;
std::vector<int> *pV = &v;
Run Code Online (Sandbox Code Playgroud)

Ker*_* SB 41

简短版本: 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.

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

所有类型都可以const/ volatile合格.

所述<type_traits>头部提供性状类来检查每个这些类型的特征.


v.o*_*dou 32

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

在此输入图像描述

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

标量是基本的,除非它不能为空,但它可以是指针类型或枚举类型.

并且基础在该语言中具有关键字.这样说时容易识别.


Jae*_*ege 7

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

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

也是这里的一张桌子.

C++类型分类