您的位置:首页 > 编程语言 > C语言/C++

C++ POD ~ plain data structure

2017-03-20 21:42 246 查看

1 ,POD 定义

Plain old data structure, 缩写为POD, 是C++语言的标准中定义的一类数据结构[1],POD适用于需要明确的数据底层操作的系统中。POD通常被用在系统的边界处,即指不同系统之间只能以底层数据的形式进行交互,系统的高层逻辑不能互相兼容。比如当对象的字段值是从外部数据中构建时,系统还没有办法对对象进行语义检查和解释,这时就适用POD来存储数据。

2 ,POD类型

POD类型包括下述C++类型,以及其cv_qualified的类型。(const voliate修饰的类型)。还有以其为基类型的数组类型

1,标量类型(scalar type)

2,POD类类型(POD class type)

标量类型

术语标量类型包括下述C++类型范畴, 以及其cv-qualified类型

算术类型(arithmetic type)

枚举类型(enumeration type)

指针类型(pointer type)

指标到成员类型(pointer-to-member type)

术语算术类型包括下述C++类型范畴

整数类型(integral type)

浮点类型(floating type)

术语整数类型包括下述C++类型范畴

有符号整数类型 (signed char, short, int, long),

无符号整数类型(unsigned char, unsigned short, unsigned int, unsigned long),

字元类型char与宽字元类型wchar_t

布林类型bool。

术语浮点类型包括C++的float, double, and long double类型

术语枚举类型包括各种枚举类型,即命名的常量值(named constant values)的集合[7].

术语指标类型包括下述C++类型范畴:

空指标pointer-to-void (void *),

对象指标pointer-to-object与指向静态数据成员的指标pointer-to-static-member-data (都是形如为T*,其中T是对象类型),

函数指标pointer-to-function与指向静态成员函数的指标pointer-to-static-member-function (都是形如T (*)(…),T是函数的返回值的类型).

术语指标到成员类型包括下述C++类型范畴:

指标到非静态数据成员(pointer-to-nonstatic-member-data), 形如T C::* 表示指向类C的类型为T的数据成员的指标;

指标到非静态成员函数(pointer-to-nonstatic-member-functions), 形如T (C::*)(…) 表示指向类C的返回值类型为T的成员函数的指标.

POD类类型

POD类类型是指聚合类(aggregate classes, 即POD-struct types)与聚合union (POD-union types),且不具有下述成员[10]:

指针到成员类型的非静态数据成员(包括数组)。

非POD类类型的非静态数据成员(包括数组)。

引用类型的(reference type)非静态数据成员。

用户定义的拷贝与赋值算子。

用户定义的析构函数。

术语聚合是指任何的数组或者类,且不具有下述特征[11]:

用户定义的构造函数。

私有或保护的非静态数据成员。

基类。

虚函数。

可见,POD类类型就是指class、struct、union,且不具有用户定义的构造函数、析构函数、拷贝算子、赋值算子;不具有继承关系,因此没有基类;不具有虚函数,所以就没有虚表;非静态数据成员没有私有或保护属性的、没有引用类型的、没有非POD类类型的(即嵌套类都必须是POD)、没有指针到成员类型的(因为这个类型内含了this指针)。

3,POD类型区别



因此,non-POD类型的对象或数组总是被初始化;而POD类型的对象或数组可能未被初始化。

POD类型必然拥有trival ctor/dtor/copy/assignment函数。因为我们可以读POD类型采用最优效率的初始值填写手法,而non-POD型别采用最保险安全的做法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: