POD (程序设计)

✍ dations ◷ 2025-11-29 18:42:52 #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++名字修饰

相关

  • 440HzA440是440赫兹的声音音调,西方音乐上,此音为标准音高。西方乐理中,A440乃是中央C上方的A音符(参照A4)。1939年,一个国际会议提出,把中央C上方的A定为440赫兹。到了1955年,国际标准化
  • 小丑鱼主题馆坐标:23°05′55″N 121°22′52″E / 23.098578°N 121.381201°E / 23.098578; 121.381201小丑鱼主题馆为一座位于台湾台东县成功镇成功渔港旁的海洋生物展览中心,又称行政
  • 伦敦商学院伦敦商学院 (英文:London Business School,LBS) 是全世界最著名的商学院之一,同时也是英国伦敦大学的成员学院。学院坐落于伦敦市中心,紧靠皇家公园之一的摄政公园。2019年金融
  • 杨伊湄杨伊湄(1987年4月13日-),是一位生于台湾高雄的艺人,曾任三立新闻记者、新闻左左右右主持人、模特儿。杨伊湄曾在高雄女中获得三届演说冠军;在国立台湾大学就读时曾赴美国成为交换
  • 国际红十字与红新月运动国际红十字与红新月运动(法语:Le Mouvement Croix-Rouge et Croissant-Rouge;英语:International Red Cross and Red Crescent Movement;德语:Internationle Rotkreuz- und Rothal
  • 酵母属见内文酵母属(学名:Saccharomyces)是真菌界中重要的一个属,其中包含了许多属于酵母的物种。酵母属在拉丁文中的意思是甜的真菌。这个属中的许多成员在食品工业中占有很重要的地
  • 福冈县立筑前高等学校福冈县立筑前高等学校,(日语:福冈県立筑前高等学校),位于日本九州福冈县福冈市西区千里111-1,成立于1980年。目前约有1200名学生,为该县最大的高等学校。1979年(昭和54年)11月1日
  • 瓦尔特·霍曼瓦尔特·霍曼(Walter Hohmann)是前一位对理解和掌握轨道力学作出重要贡献的德国土木工程师。在1925年出版的书中,霍曼展示了一个可让飞船节能高效地在不同轨道间转移的路径,现称
  • 石坂浩二石坂浩二(英语:Kōji Ishizaka, 1941年6月20日-)是一位日本男演员,画家,作家,翻译家,作词家和主持人。目前隶属于尾木制作艺人经纪公司。1941年出生在日本东京,毕业于庆应义塾大学法
  • 橡果国际橡果国际股份有限公司,简称橡果国际(英语:Acorn International Inc.,NYSE:ATV),在1997年,由Robert Roche(董事长)和杨东杰(首席执行官),于上海(总部)成立“橡果公司”。业务在中国内地经营