[C++]POD数据
2020/10
06
13:10
POD=Plain Old Data
即C语言的老布局数据
Arithmetic types (3.9.1), enumeration types, pointer types, and pointer to member types (3.9.2), and cv-qualified versions of these types (3.9.3) are collectively called scalar types. Scalar types, POD-struct types,POD-union types (clause 9), arrays of such types and cv-qualified versions of these types (3.9.3) are collectively called POD types.
C++11把POD分为2个概念集合,平凡布局(trival)和标准布局(standard layout),同时满足称为POD类型
1、拥有默认构造函数和析构函数(trival constructor, trival destructor)
2、拥有平凡的复制构造函数和移动构造函数(trival copy constructor,trival move constructor)
3、拥有平凡的复制赋值运算符和移动赋值运行符(trival assignment operator, trival move operator)
4、不能包含虚函数和虚基类
其第1、2、3可以使用=default来声明缺省版本
POD数据类型是C++为了兼容C的数据。可以使用std::is_trivial<ClassName>::value 来判断是否为trivial类型
#include <iostream>
using namespace std;
#pragma pack(1)
class Fruit
{
};
class Stone
{
};
class AppleA :public Fruit
{
public:
Fruit childFruit;
int size;
};
class AppleB :public Fruit
{
public:
int weight;
Fruit childFruit;
};
class AppleC :public Fruit
{
public:
Fruit firstFruit;
Stone secondStone;
Fruit threeFruit;
int color;
};
#pragma pack()
int main()
{
AppleA appleA;
AppleB appleB;
AppleC appleC;
cout << "sizeof(appleA)=" << sizeof(appleA) << endl;
cout << "&appleA =" << &appleA << endl;
cout << "&appleA.childFruit=" << &appleA.childFruit << endl << endl;
cout << "sizeof(appleB)=" << sizeof(appleB) << endl;
cout << "&appleB =" << &appleB << endl;
cout << "&appleB.childFruit=" << &appleB.childFruit << endl << endl;
cout << "sizeof(appleC)=" << sizeof(appleC) << endl;
cout << "&appleC =" << &appleC << endl;
cout << "&appleC.firstFruit=" << &appleC.firstFruit << endl;
cout << "&appleC.secondStone=" << &appleC.secondStone << endl;
cout << "&appleC.threeFruit=" << &appleC.threeFruit << endl << endl;
return 0;
}
输出:
sizeof(appleA)=5
&appleA =012FFA40
&appleA.childFruit=012FFA40
sizeof(appleB)=5
&appleB =012FFA30
&appleB.childFruit=012FFA34
sizeof(appleC)=7
&appleC =012FFA20
&appleC.firstFruit=012FFA20
&appleC.secondStone=012FFA21
&appleC.threeFruit=012FFA22
CopyRights: The Post by BY-NC-SA For Authorization,Original If Not Noted,Reprint Please Indicate From 老刘@开发笔记
Post Link: [C++]POD数据
Post Link: [C++]POD数据