POD (程序设计)

✍ dations ◷ 2025-07-16 05:38:21 #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++名字修饰

相关

  • 氟奋乃静氟奋乃静(Fluphenazine),常见商品名Prolixin,为一种精神科药物,用于治疗包括精神分裂症在内的慢性思觉失调,并与氯丙嗪等低潜能的药品效果相似。本品可透过口服、肌肉注射,以及皮下
  • 诺克斯维尔市诺克斯维尔(英文:Knoxville),是美国田纳西州东部的一个城市,在阿巴拉契亚山脉的西麓和田纳西河的河边,于1786年建市。诺克斯维尔的名字是纪念美国第一位的军事部长亨利·诺克斯(Hen
  • 李国庆李国庆(1964年10月1日-),中国企业家。他曾任当当网联合总裁、中国书刊发行行业协会副会长、科文实业集团董事长等职。他1995年创立科文实业集团,于1999年和美国国际数据集团(IDG)、
  • 弗吉尼亚半岛弗吉尼亚半岛,是一个在美国弗吉尼亚东南面的半岛,四周有约克河(北方)、詹姆斯河(西方),汉普顿锚地(东南方)和切萨皮克湾(东南方)。汉普顿锚地是不少环水的大市区的普通名字。汉普顿锚地
  • 燃油税燃油税,又称燃料税,是一种直接税及消费税,主要可分为汽油税、柴油税两种。汽油税是针对汽油消费者而征收的税款,目的是引导汽车司机的消费行为。例如,经济学原理,加汽油税可以减少
  • 国际记者协会国际记者协会(IPA)是一个由专业娱乐记者组成的组织,代表国内外的报刊、电视、广播、有线频道以及新媒体通路市场 。该协会自1997年1月起,设立了一个年度电影电视奖项卫星奖。所
  • 刘质平刘质平(1894年-1978年),浙江盐官人,中国音乐家、艺术家。就读于浙江第一师范,受李叔同赏识,1916年东渡日本,入东京音乐学校深造,李叔同给他的信中提到:“不可心太高,心高是灰心之根源也
  • 哈利亚拉乡坐标:59°25′01″N 26°15′41″E / 59.41694°N 26.26139°E / 59.41694; 26.26139哈利亚拉乡(爱沙尼亚语:Haljala vald),是爱沙尼亚的一个乡,位于该国北部,由西维鲁县负责管辖,首
  • 华龙一号华龙一号(代号HPR1000)是中国自主知识产权的第三代压水堆核电站技术,由中国核工业集团及中国广核集团联合研发,是两个集团分别研制的ACP1000与ACPR1000+两种三代核电技术融合的
  • 科洛·塞维尼科洛·史蒂文斯·塞维尼(英语:Chloë Stevens Sevigny,/ˈkloʊ.iː ˈsɛvəni/;1974年11月18日-)是一位美国女演员,时装设计师。曾是一名模特。出生于马萨诸塞州的斯普林菲尔德