所谓POD,全称为Plain Old Data,表示普通的旧数据类型,这种类型不存在C++的虚函数和许捷诚等数据,体现了其与C的兼容,可以使用用最老的memcpy()函数进行复制,使用memset()进行初始化等。
一、POD类型的条件
POD类型需要满足两个条件:平凡的(trivial)和标准布局的(standard layout)
平凡的
- 拥有平凡的默认构造函数和析构函数
- 拥有平凡的拷贝构造函数
- 拥有平凡的拷贝赋值函数
- 没有虚函数和虚基类
标准布局
- 所有非静态成员都有相同的访问权限
- 继承时,满足以下之一(静态和非静态分离):
-
- 派生类有非静态成员,且只有一个包含静态成员的基类
- 基类有非静态成员,派生类没有非静态成员。
- 类中第一个非静态成员类型非基类
- 没有虚函数和虚基类
- 非静态数据成语及其基类符合标准布局
二、POD类型的优点
1)字节赋值,代码中我们可以安全地使用memset和memcpy对POD类型进行初始化和拷贝等操作。
2)提供对C内存布局兼容。C++程序可以与C函数进行相互操作,因为POD类型的数据在C与C++间的操作总是安全的。
3)保证了静态初始化的安全有效。静态初始化在很多时候能够提高程序的性能,而POD类型的对象初始化往往更加简单(比如放入目标文件的.bss段,在初始化中直接被赋0)。