POD (程序设计)

✍ dations ◷ 2025-12-02 19:19:13 #C++,数据类型

Plain old data structure, 缩写为POD, 是C++语言的标准中定义的一类数据结构,POD适用于需要明确的数据底层操作的系统中。POD通常被用在系统的边界处,即指不同系统之间只能以底层数据的形式进行交互,系统的高层逻辑不能互相兼容。比如当对象的字段值是从外部数据中构建时,系统还没有办法对对象进行语义检查和解释,这时就适用POD来存储数据。

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

术语标量类型包括下述C++类型范畴, 以及其cv-qualified类型:

术语算术类型包括下述C++类型范畴:

术语整数类型包括下述C++类型范畴:

术语浮点类型包括C++的float, double, and long double类型.

术语枚举类型包括各种枚举类型,即命名的常量值(named constant values)的集合.

术语指针类型包括下述C++类型范畴:

术语指针到成员类型包括下述C++类型范畴:

POD类类型是指聚合类(aggregate classes, 即POD-struct types)与聚合union (POD-union types),且不具有下述成员:

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

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

C++11把情况推广为两种:

类型是平凡的(trivial),则可以静态初始化、可以用memcpy直接复制数据而不是必须用copy构造函数。其生存期始于它的对象的存储被定义,无须等到构造函数完成。平凡class或结构必须满足:

构造函数是平凡的,仅当类没有虚成员函数也没有虚基类。Copy/move运算符是平凡的,仅当没有静态数据成员。

类型是标准布局的(standard-layout)意味着它是有序的并且安排其成员兼容于C语言。这要求满足:

一个class/struct/union是POD,当它是平凡的、标准布局的,所有数据成员是POD.

分为两个概念,对象可以不满足其中一个但是满足另外一个。例如,类有复杂的move与copy构造函数,因此不是平凡的,但可能是标准布局因此能与C程序互操作。类似地,一个类的有public与private的非静态数据成员,因此不是标准布局,但可以是平凡的因此可以memcpy操作。

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

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

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

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

"POD-struct ... types are layout-compatible if they have the same number of members, and corresponding members (in order) have layout-compatible types".

POD-union ... types are layout-compatible if they have the same number of members, and corresponding members (in any order) have layout-compatible types".

JAVA中,一些开发者认为POD类型是符合没有public成员且没有方法的类,比如data transfer object。其实不使用事件句柄并且不实现除getter和setter之外的附加方法的POJO(只含有getter和setter的类)和JAVA Bean也属于POD。但不管怎么样,POJO和JAVA Bean已经有了封装,已经违反了POD的定义了。

Visual C++名字修饰

相关

  • 滴虫性阴道炎滴虫性阴道炎(英语:trichomoniasis,trich)也称为滴虫炎,,是因为阴道毛滴虫(英语:Trichomonas vaginalis)所引起的传染病,会造成女性阴道或是男性尿道的发炎。约70%的女性及男性在罹病
  • 钯催化偶合钯催化的偶联反应是偶联反应的一大类,是指以钯化合物作为催化剂。它是均相催化(英语:Homogeneous catalysis)剂的研究和应用的活跃领域。2010年诺贝尔化学奖颁发给理查德·赫克
  • 凯迪凯迪社区是中国大陆著名的时政论坛之一,南方报业传媒集团旗下的凯迪网络附属讨论区,开设于海南省海口市,所有者为凯迪网络资讯有限公司,日IP访问量最高日达到80万,同时在线人数常
  • 塔拉里塔拉里(法语:Tarrare或Tarare,约1772年-1798年)是位法国军人和艺人,以异乎寻常的饮食习惯闻名。他总是饥肠辘辘,能够吃下海量的肉类。由于父母实在供养不起,所以他十几岁时就离开了
  • 宝来宝来温泉位于台湾高雄市六龟区宝来里,是荖浓溪支流宝来溪旁的一处温泉地。依地质分类,属于中央山脉板岩区的变质岩温泉。宝来温泉因莫拉克台风带来的八八水灾而受损严重。宝来
  • 韩国体育韩国体育是韩国文化的重要部分。跆拳道是源于韩国的一种集强身健体,防身自卫和心灵修养为一身的搏击武术,被称为韩国的国技。目前已经成为奥运会的比赛项目。韩国的传统体育运
  • 蕈毒碱型乙酰胆碱受体蕈毒碱型乙酰胆碱受器是一大类固定在细胞膜上的乙酰胆碱受器,其对蕈毒碱比对烟碱(尼古丁)更为敏感。反过来对烟碱比较敏感的则称为烟碱型乙酰胆碱受器。蕈毒碱与烟碱两者皆为生
  • 溶胶凝胶溶胶凝胶技术是指金属有机或无机化合物经过溶胶-凝胶化和热处理形成氧化物或其它固体化合物的方法。溶胶是一种胶状悬浮液,可借由胶化作用得到固体,而凝胶则是介于固体与液体
  • NetBSDNetBSD是一份自由、安全的具有高度可定制性的类Unix操作系统,适于多种平台,从64位AMD Athlon服务器和桌面系统到手持设备和嵌入式设备。它设计简洁,代码规范,拥有众多先进特性,使
  • 自有品牌生产自有品牌生产(英语:Original Brand Manufacturer,缩写作OBM),也译作原创品牌设计,所指的就是生产商建立自有品牌,并以此品牌行销市场的一种作法。由设计、采购、生产到贩售皆由单一