POD (程序设计)

✍ dations ◷ 2024-12-23 05:42:43 #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++名字修饰

相关

  • 海绵多孔动物门(学名:Porifera)为原始的多细胞生物,也称海绵动物门(Spongiatia或Spongia),一般称为海绵。海绵没有神经元/神经系统、消化和循环系统,相反,它们大多依靠海水流过自己的身体
  • 中性理论中性演化理论全称为分子演化的中性理论(英语:Neutral theory of molecular evolution),简称为中性理论。是日本遗传学家木村资生在1968年早期所提出的一种演化理论。这个理论认
  • 甲烯在化学中,甲烯(英语:methylene)是由一个碳原子和两个氢原子组成的化合物,又称亚甲基或甲烯基,其化学式为CH2。在自然状态下,不会存在甲烯,除非是在低温、低压的特殊状态下,才可能有此
  • 孔雀鱼孔雀鱼(学名:Poecilia reticulata),又名孔雀花鳉,也称为凤尾鱼、彩虹花鳉、虹鳉、古比鱼等,是一种常见小型热带观赏鱼,颜色鲜艳,品系多,很受水族爱好者欢迎。原产于南美洲的委内瑞拉
  • 陈式刚陈式刚(1935年-),浙江温州人,中国理论物理学家,长期从事基础理论研究和核武器理论研究与设计。他先后培养了17位博士,现担任北京应用物理与计算数学研究所研究员。2001年当选为中国
  • 贝叶斯推理贝叶斯推断(英语:Bayesian inference)是推论统计的一种方法。这种方法使用贝叶斯定理,在有更多证据及信息时,更新特定假设的概率。贝叶斯推断是统计学(特别是数理统计学)中很重要的
  • Clonidine可乐定(英语:Clonidine)(商品名称为:Catapres, Kapvay, Nexiclon, Clophelin等),是一种用来治疗高血压、注意力缺陷多动障碍、焦虑症、抽动综合症、偏头痛、“酒精、鸦片、尼古丁的
  • 贾斯汀·柯克贾斯汀·柯克(英语:Justin Kirk,1969年5月28日-)是一位美国男演员。他最著名的作品是在电视短剧《天使在美国》(2003年)中饰演普莱尔·沃尔特,以及在《单身毒妈》(2005年至2012年)中饰
  • 玛丽·诺顿凯丝琳·玛丽·诺顿(英语:Kathleen Mary Norton ,1903年12月10日-1992年8月29日)是一位英国儿童文学作家。旧姓:皮尔逊(Pearson)。代表作有《地板下的小矮人》(The Borrowers)。顺便一
  • 陈龙可陈龙可,字蛩潜,福建晋江人,明朝政治人物、进士出身。天启二年(1622年)登壬戌进士,选南京户部主事,后转升员外郎、郎中,改任琼州知府。