据我所知,基本类型是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
长版
对象类型
标量
算术(积分,浮点数)
指针:T *
适用于任何类型T
枚举
指针到构件
nullptr_t
数组:T[]
或T[N]
任何完整的非引用类型T
课程:class Foo
或struct Bar
琐碎的课程
骨料
POD课程
(等等)
工会: union Zip
引用类型:T &
,T &&
用于任何对象或自由函数类型T
功能类型
免费功能: R foo(Arg1, Arg2, ...)
会员职能: R T::foo(Arg1, Arg2, ...)
void
会员类型的工作方式如下.成员类型具有表单类型T::U
,但您不能拥有成员类型的对象或变量.您只能拥有成员指针.成员指针具有类型T::* U
,如果U
是(自由)对象类型,则它是指向成员对象的指针,如果是(自由)函数类型,则指向成员函数指针U
.
除了void
unsized数组和声明但未定义的类和联合之外,所有类型都是完整的.所有不完整的类型除外void
可以完成.
所有类型都可以const
/ volatile
合格.
所述<type_traits>
头部提供性状类来检查每个这些类型的特征.
v.o*_*dou 32
我认为这将是一个更全面的答案:
原始文件:http:
//howardhinnant.github.io/TypeHiearchy.pdf
标量是基本的,除非它不能为空,但它可以是指针类型或枚举类型.
并且基础在该语言中具有关键字.这样说时容易识别.
有一系列库类用于测试变量的类型. std::is_scalar
可用于测试对象是否为标量.
甲标量类型是已经内置功能的加法运算符不重载(算术,指针,指针构件,枚举和类型
std::nullptr_t
).
也是这里的一张桌子.