C++ POD(Plain Old Data)类型
来源:互联网 发布:hdc电视直播软件 编辑:程序博客网 时间:2024/06/06 07:04
POD全称Plain Old Data是指C风格的struct结构体定义的数据结构,其中struct结构体中只能定义常规数据类型(不能含有自定义数据类型)。它仅作为被动的收藏的字段值,不使用封包或者other object-oriented特征。
对于POD类型T的对象,不管这个对象是否拥有类型T的有效值,如果将该对象的底层字节序列复制到一个字符数组(或者无符号字符数组)中,再将其复制回对象,那么该对象的值与原始值一样。
对于任意的POD类型T,如果两个T指针分别指向两个不同的对象obj1和obj2,如果用memcpy库函数把obj1的值复制到obj2,那么obj2将拥有与obj1相同的值。
简言之,针对POD对象,其二进制内容是可以随便复制的,在任何地方,只要其二进制内容在,就能还原出正确无误的POD对象。对于任何POD对象,都可以使用memset()函数或者其他类似的内存初始化函数。
以上是C++ 03标准中的定义。
正是因为03标准中对POD限制的太严格了,所以C++ 0x标准中队POD的定义放宽了一些。
如果一个类或结构是平凡的,具有标准布局的,且不包含任何非POD的非静态成员,那么它就被认定是POD。平凡的类或结构定义如下:
1.具有一个平凡的缺省构造器。(可以使用缺省构造器语法,如 SomeConstructor() = default;)
2.具有一个平凡的拷贝构造器。(可以使用缺省构造器语法)
3.具有一个平凡的拷贝赋值运算符。(可以使用缺省语法)
4.具有一个非虚且平凡的析构器。
一个具有标准布局的类或结构被定义如下:
1.所有非静态数据成员均为标准布局类型。
2.所有非静态成员的访问权限(public, private, protected) 均相同。
3.没有虚函数。
4.没有虚基类。
5.所有基类均为标准布局类型。
6.没有任何基类的类型与类中第一个非静态成员相同。
7.要么全部基类都没有非静态数据成员,要么最下层的子类没有非静态数据成员且最多只有一个基类有非静态数据成员。总之继承树中最多只能有一个类有非静态数据成员。所有非静态数据成员必须都是标准布局类型。
其实说到底,POD就是一个很常规的结构体/类。看个例子:
上面的结构体在C++ 03中不算做一个POD,因为它有构造函数,而在C++ 0x中,这个结构体可以算作是一个POD类型,因为其满足上面的条件(貌似没有非虚的析构函数)。
- C++ POD(Plain Old Data)类型
- C++ POD(Plain Old Data)类型
- C++ POD(Plain Old Data)类型
- C++ POD(Plain Old Data)类型
- Plain Old Data (POD)
- C++ trivial和non-trivial及POD类型POD(Plain Old Data)
- C++中的Plain Old Data(POD)
- C++ Aggregate 与 POD(Plain Old Data)的解释
- Plain old data structure
- Plain old data structure
- Plain Old Document -POD写法(perl)
- C++ POD ~ plain data structure
- Passive data structure plain old data structure, or plain old data.
- C++中聚合类型(aggreate)和 palin old data
- "POD" 类型
- pod 类型
- POD 类型
- POD类型解释
- 夕——做一首只能读不能念的小诗
- lintcode 直方图最大矩形覆盖与最大子矩阵
- table表格------一行隐藏和显示
- MySQL基本命令 查看数据库、表的基本命令
- [BZOJ]2744: [HEOI2012]朋友圈 二分图匹配
- C++ POD(Plain Old Data)类型
- Project Euler 6-10题
- 马哲法科的jQuery
- 平衡二叉树平衡法则
- 同步AD站点信息命令
- 在 Mac OS X 中启用和使用“root”用户(雪豹版)
- php删除字符串最后一位
- 关于github上倒入项目时会出现的一些问题解析
- cenots6.5免密钥访问