POD 类型一般具有以下几种特征(包括 class、union 和 struct等):
1) 没有用户自定义的构造函数、析构函数、拷贝构造函数和移动构造函数。
2) 不能包含虚函数和虚基类。
3) 非静态成员必须声明为 public。
4) 类中的第一个非静态成员的类型与其基类不同,例如:
`class B1{};`
`class B2 : B1 { B1 b; };`
class B2 的第一个非静态成员 b 是基类类型,所以它不是 POD 类型。
5) 在类或者结构体继承时,满足以下两种情况之一:
派生类中有非静态成员,且只有一个仅包含静态成员的基类;
基类有非静态成员,而派生类没有非静态成员。
我们来看具体的例子:
`class B1 { static int n; };`
`class B2 : B1 { int n1; };`
`class B3 : B2 { static int n2; };`
对于 B2,派生类 B2 中有非静态成员,且只有一个仅包含静态成员的基类 B1,所以它是 POD 类型。对于 B3,基类 B2 有非静态成员,而派生类 B3 没有非静态成员,所以它也是 POD 类型。
6) 所有非静态数据成员均和其基类也符合上述规则(递归定义),也就是说 POD 类型不能包含非 POD 类型的数据。
7) 此外,所有兼容C语言的数据类型都是 POD 类型(struct、union 等不能违背上述规则)。
C++POD 类型
最新推荐文章于 2022-04-19 12:39:04 发布