群里发过来一份他们公司的笔试题,看了下,发现里面考了一个判断如下是否为POD类型,没搞明白什么是POD,多方查阅后,发现其实是指一个C风格代码的概念。

POD全称Plain Old Data是指C风格的struct结构体定义的数据结构,其中struct结构体中只能定义常规数据类型(不能含有自定义数据类型)。它仅作为被动的收藏的字段值,不使用封包或者other object-oriented特征。

对于POD类型T的对象,不管这个对象是否拥有类型T的有效值,如果将该对象的底层字节序列复制到一个字符数组(或者无符号字符数组)中,再将其复制回对象,那么该对象的值与原始值一样。

对于任意的POD类型T,如果两个T指针分别指向两个不同的对象obj1和obj2,如果用memcpy库函数把obj1的值复制到obj2,那么obj2将拥有与obj1相同的值。

简言之,针对POD对象,其二进制内容是可以随便复制的,在任何地方,只要其二进制内容在,就能还原出正确无误的POD对象。对于任何POD对象,都可以使用memset()函数或者其他类似的内存初始化函数。

以上是C++ 03标准中的定义。

正是因为03标准中对POD限制的太严格了,所以C++ 0x标准中队POD的定义放宽了一些。

如果一个类或结构是平凡的,具有标准布局的,且不包含任何非POD的非静态成员,那么它就被认定是POD。平凡的类或结构定义如下:

1.具有一个平凡的缺省构造器。(可以使用缺省构造器语法,如 SomeConstructor() = default;)

2.具有一个平凡的拷贝构造器。(可以使用缺省构造器语法)

3.具有一个平凡的拷贝赋值运算符。(可以使用缺省语法)

4.具有一个非虚且平凡的析构器。

一个具有标准布局的类或结构被定义如下:

1.所有非静态数据成员均为标准布局类型。

2.所有非静态成员的访问权限(public, private, protected) 均相同。

3.没有虚函数。

4.没有虚基类。

5.所有基类均为标准布局类型。

6.没有任何基类的类型与类中第一个非静态成员相同。

7.要么全部基类都没有非静态数据成员,要么最下层的子类没有非静态数据成员且最多只有一个基类有非静态数据成员。总之继承树中最多只能有一个类有非静态数据成员。所有非静态数据成员必须都是标准布局类型。

其实说到底,POD就是一个很常规的结构体/类。看个例子:

struct mydata
{mydata() : i(0), f(0.0f), c('1') {}int i;float f;char c;
};

上面的结构体在C++ 03中不算做一个POD,因为它有构造函数,而在C++ 0x中,这个结构体可以算作是一个POD类型,因为其满足上面的条件(貌似没有非虚的析构函数)。

不过这个东西就是个概念,不明白靠这个东西想了解应聘者的什么知识,难道是对C++标准的了解?

C++ POD(Plain Old Data)类型相关推荐

  1. C++: POD, Plain old data, 朴素老数据,别别扭扭

    文章目录 简介 实现 plain这个单词其主要的寓意是 简介 POD就是C格式的数据结构,没有C++那一套编译器自动添加的东西,什么构造函数啦,析构函数,等等.目的就是和C兼容,可以使用memcpy直 ...

  2. C++ Aggregate 与 POD(Plain Old Data)的解释

    无论是 Aggregate 还是 POD(Aggregates的升级版)都是对用来约束初始化的精巧的概念. motivation 当我们欲构造如下的union时: union {int i;std:: ...

  3. data类型的Url格式及Base64编码:把小数据直接嵌入到Url中

    所谓"data"类型的Url格式,是在RFC2397中 提出的,目的对于一些"小"的数据,可以在网页中直接嵌入,而不是从外部文件载入.例如对于img这个Tag, ...

  4. PHP浏览器中的data类型的Url格式,data:image/png

    背景 data类型的直接从网页载入  不用素材文件了  更快! 综合 data:,<文本数据> data:text/plain,<文本数据> data:text/html,&l ...

  5. data类型的Url的格式

    data类型的Url的格式 一.data类型的简介 所谓"data"类型的Url格式,是在RFC2397中提出的,目的对于一些"小"的数据,可以在网页中直接嵌入 ...

  6. Bootstrap data类型的Url格式--url(data:image/gif;base64,AAAA):把小数据直接嵌入到Url中

    原文链接http://shiyun1013.blog.163.com/blog/static/1077403620111113234714/ 所谓"data"类型的Url格式,是在 ...

  7. “background-image:url(data:image”data类型的Url格式简介

    所谓"data"类型的Url格式,是在RFC2397中 提出的,目的对于一些"小"的数据,可以在网页中直接嵌入,而不是从外部文件载入.例如对于img这个Tag, ...

  8. 浏览器中的data类型的Url格式,data:image/png,data:image/jpeg!

    所谓"data"类型的Url格式,是在RFC2397中 提出的,目的对于一些"小"的数据,可以在网页中直接嵌入,而不是从外部文件载入.例如对于img这个Tag, ...

  9. data类型的Url格式--url(data:image/gif;base64,AAAA):把小数据直接嵌入到Url中

    所谓"data"类型的Url格式,是在RFC2397中提出的,目的对于一些"小"的数据,可以在网页中直接嵌入,而不是从外部文件载入.例如对于img这个Tag,哪 ...

最新文章

  1. 复习笔记2018.8.3
  2. BZOJ-2780 Sevenk Love Oimaster(广义后缀自动机)
  3. VC2010 [转]解决char *无法转换为LPCWSTR问题
  4. netty为什么性能高
  5. c#10中的namespace
  6. 华中科技大学计算机网络实验_第四届江苏省计算机网络与云计算新技术研讨会在南京召开...
  7. 计算机视觉研究入门全指南
  8. EfficientNet 解析:卷积神经网络模型尺度变换的反思
  9. hive sql 报错后继续执行_Hive优化之Spark执行引擎参数调优(二)
  10. 循环机换变速箱油教程_汽车变速箱油啥时更换?重力换和循环机换有啥区别?注意啥?...
  11. 洛谷P1015回文数
  12. 【数据库原理】滨江学院姜青山 期末试卷知识点笔记整理 南京信息工程大学
  13. 资管运营BAND原创 | 他山之石:境外基金业绩报酬计算方法(二)
  14. 我的游戏学习日志3——三国志GBA
  15. 如何解决笔记本电脑不接电源自动断网的问题?
  16. 什么是主动式计算机用户,电脑电源主动PFC是什么意思
  17. nuxt 引入第三方字体、艺术字效果
  18. 计算机网络高频知识点(一)
  19. 必应壁纸php,PHP 自动保存Bing 每日壁纸
  20. Unity VR开发教程 OpenXR+XR Interaction Toolkit (五) UI

热门文章

  1. 数据库-SQL分类介绍及总结
  2. 3测试图片显示置信度_告别腾讯百度图片文字识别API调用,OCR图片文字识别就用这条代码...
  3. JavaFX 中的像素、分辨率与缩放比
  4. Handler 源码解析(Java 层)
  5. 有效的字母异位词---简单
  6. 【VMware vSAN 6.6】5.8.自动化:vSAN硬件服务器解决方案
  7. expect 普通用户自动输入密码到root下,执行命令
  8. 我的新宠Vue a系列 项目初构
  9. SaaS市场普及 网络推广策略最有效
  10. Python-crawler-citeulike