POD

http://zh.wikipedia.org/wiki/POD_(%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1)

Plain old data structure,缩写为POD,是C++语言的标准定义的一类数据结构,主要用于C++与C语言的数据结构对象的兼容目的

定义

POD类型包括下述C++类型,以及cv-qualified的类型,还有以其为基类型的数组类型。

标量类型(scalar type)

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)的集合。

术语指针类型包括下述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),且不具有下述成员:

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

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

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

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

用户定义的析构函数。

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

用户定义的构造函数。

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

基类。

虚函数。

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

用途

POD类型在源代码兼容ANSI C时非常重要。POD对象与C语言的对象具有共同的一些特性,包括初始化、复制、内存布局、寻址。

一个例子是下述C++的new表达式中的对象初始化,POD与non-POD的区别:

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

其它与POD相关的C++特性:

内存布局——POD对象的组成字节是连续的

初始化——对于non-const POD对象,如果没有初始化声明时,具有不确定的初值(indeterminate initial value)。POD对象的缺省初始化为0值,静态POD对象初始化为给定的初值,如果是局部静态POD对象,在进入所在作用域之前初始化;对于非局部静态POD对象,在任何动态初始化之前赋值初值。

拷贝——POD对象可直接拷贝到(例如memcpy())到其它字符数组或相同POD类型的对象,保持其值不变。POD类型可以用作标准模板字符串类的字符,由于这个原因,函数的返回值如果是non-POD类型,则不能通过寄存器传递 函数的返回值。

寻址——一个POD对象的地址可以是一个地址常量表达式;一个对POD成员的引用可以是一个引用常量表达式。一个POD-struct对象的指针,适合用reinterpret_cast转换到它的初始值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值