就我理解,基本类型是标量,而数组是聚合的,但用户定义的类型呢?以什么标准将它们划分为这两个类别?
struct S { int i; int j };
class C { public: S s1_; S s2_ };
std::vector<int> V;
std::vector<int> *pV = &v;
就我理解,基本类型是标量,而数组是聚合的,但用户定义的类型呢?以什么标准将它们划分为这两个类别?
struct S { int i; int j };
class C { public: S s1_; S s2_ };
std::vector<int> V;
std::vector<int> *pV = &v;
简短版: 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
,但您不能有成员类型的对象或变量。您只能有成员指针。如果U
是(自由)对象类型,则成员指针的类型为T::* U
,如果U
是(自由)函数类型,则成员指针为指向成员函数的指针。
除void
、未定大小的数组和已声明但未定义的类和联合外,所有类型均为完整的。除void
外的所有不完整类型都可以完成。
所有类型都可以被const
/volatile
修饰。
<type_traits>
头文件提供了特征类来检查每种类型特征。
我认为这会是一个更全面的答案:
原始文件:
http://howardhinnant.github.io/TypeHiearchy.pdf
标量是一种基本类型,但不能是void,但可以是指针类型或枚举类型。
而且基本类型在语言中有关键词。这样说起来很容易识别。
std::is_scalar
来测试一个对象是否为标量。
此外,还有来自这里的一个表格。标量类型是指具有内置加法运算符功能且没有重载(算术、指针、成员指针、枚举和
std::nullptr_t
)的类型。