什么是pod类型
很久很久以前,C 语言统一了江湖。几乎所有的系统底层都是用 C 写的,当时定义的基本数据类型有
int、char、float 等整数类型、浮点类型、枚举、void、指针、数组、结构等等。然后只要碰到一串01010110010 之类的数据,编译器都可以正确的把它解析出来。
那么到了 C++ 诞生之后,出现了继承、派生这样新的概念,于是就诞生了一些新的数据结构。比如某个派生类,C 语言中哪有派生的概念啊,遇到这种数据编译器就不认识了。可是我们的计算机世界里,主要的系统还是用 C 写的啊,为了和旧的 C 数据相兼容,C++ 就提出了 POD 数据结构概念。
POD 是 Plain Old Data 的缩写,是 C++ 定义的一类数据结构概念,比如 int、float 等都是 POD 类型的。Plain 代表它是一个普通类型,Old 代表它是旧的,与几十年前的 C 语言兼容,那么就意味着可以使用memcpy() 这种最原始的函数进行操作。两个系统进行交换数据,如果没有办法对数据进行语义检查和解释,那就只能以非常底层的数据形式进行交互,而拥有 POD 特征的类或者结构体通过二进制拷贝后依然能保持数据结构不变。也就是说,能用 C 的 memcpy() 等函数进行操作的类、结构体就是 POD 类型的数据。
基本上谈到这个概念,一般都是说某某 class、struct、union 是不是 POD 类型的。
是不是 POD 类型的,可以用 is_pod::value 来判断。那什么样的类、结构体是拥有 POD 特性的
呢?要求有两个:
一个是它必须很平凡、很普通
另一个是布局有序。
能平凡就平凡trival(平凡)是个概念,满足以下条件即可:
不能写 构造/析构函数、拷贝/移动构造函数、拷贝/移动运算符,而是用编译器自动为我们生成,那这个数
据就是“平凡的”。非要写的话,用 C++ 11 的 default 关键字。例如下列代码用 std::is_trivial::value 来
判断是否“平凡”。

A 类手写了个构造函数,虽然什么都没填,但这构造函数已经不是编译器默认提供的了,所以不平凡,所
以就不是 POD 类,自然就不能用诸如 memcpy() 这种 C 语言的函数来操作;
B 类的一堆构造函数啥的都没写,默认由编译器提供,所以是平凡的;
C 类虽然写了构造函数,但用了 C++11 的 default 关键字修饰,也是平凡的。
不能有 虚函数 和 虚基类。只要满足以上条件,就是拥有平凡特征的数据类型。
布局要有序
除了平凡之外,还对布局有要求。为了便于理解讲述,我们把非静态数据称为普通数据。普通成员有相同的访问级别。例如下面的类,因为 a 和 b 的访问级别不一样,所以布局无序,自然就不是POD 类型的数据。当然,如果 b 写成 static int b,例子中的 A 类就是 POD 类型的了。所以一定要看清每个字,是“普通成员”哦。

只要有父类,普通成员只能在其中一个类中,不可分散。因为 C 没有继承的概念,所以就别把普通成员在
两个类中都写,写在一个类中就像 C 的风格了。如下图的代码,从 A 的角度看上边没有父类,就按上文的
规则去判断是否是 POD 类型。从 A1 的角度看上边有个父类,这个时候就要看父子两个是否都有普通成员
了,都有的话肯定不行,只能其中一个有。

如何使用 POD 类型的数据?
前面既然说了,具有 POD 性质的数据可以使用 C 语言中的 memcpy() 等底层函数,那我们来看看怎么
用。

相关文章:
什么是pod类型
很久很久以前,C 语言统一了江湖。几乎所有的系统底层都是用 C 写的,当时定义的基本数据类型有 int、char、float 等整数类型、浮点类型、枚举、void、指针、数组、结构等等。然后只要碰到一串01010110010 之类的数据,编译器都可以正确的把它解…...
2023年中小企业实施智能制造的建议
智能制造的载体是制造系统,制造系统从微观到宏观有不同的层次,主要包括制造装备、制造单元、制造车间(工厂)、制造企业和企业生态等。随着智能制造的深入推进,未来智能制造将向以下五个方向发展。 (一&…...
【LeetCode】剑指 Offer 19. 正则表达式匹配 p124 -- Java Version
题目链接:https://leetcode.cn/problems/zheng-ze-biao-da-shi-pi-pei-lcof/ 1. 题目介绍(19. 正则表达式匹配) 请实现一个函数用来匹配包含. 和*的正则表达式。模式中的字符.表示任意一个字符,而’*表示它前面的字符可以出现任意…...
linux和windows中安装emqx消息服务器
大家好,我是雄雄,欢迎关注微信公众号雄雄的小课堂 现在是:2023年3月1日21:53:55 前言 最近几天看了下mqtt,通过不断的搜索资料,也将mqtt集成到项目中,跑了个demo运行,和预想中的差不多&#x…...
【XXL-JOB】XXL-JOB的搭建和使用
【XXL-JOB】XXL-JOB的搭建和使用 文章目录【XXL-JOB】XXL-JOB的搭建和使用1. 任务调度1.1 实现任务调度1.1.1 多线程实现1.1.2 Timer实现1.1.3 ScheduledExecutor实现2. 分布式任务调度2.1 采用分布式的原因3. XXL-JOB3.1 XXL-JOB介绍3.2 执行流程4. 搭建XXL-JOB4.1 创建数据库…...
HCIP-5OSPF基本原理及基本配置学习笔记
1、OSPF基本原理 开放式最短路径优先OSPF(Open Shortest Path First)协议是IETF定义的一种基于链路状态的内部网关路由协议。 RIP是一种基于距离矢量算法的路由协议,存在着收敛慢、易产生路由环路、可扩展性差等问题,目前已逐渐被…...
Migrate your data into databend with DataX
现在互联网应用越来越复杂,每个公司都会有多种多样的数据库。通常是用最好的硬件来跑 OLTP,甚至还在 OLTP 中进行分库分表来满足业务,这样对于一些分析,聚合,排序操作非常麻烦。这也有了异构数据库的数据同步需求&…...
ssh: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password)
【ansible 设置host为localhost,执行ping命令报错】 [eniq-slocalhost ansible]$ ansible all -m ping -i inventory localhost | UNREACHABLE! > { "changed": false, "msg": "Failed to connect to the host via ssh: Perm…...
有限元中三角形的一些积分公式
文章目录有限元中三角形的相关积分公式有限元中三角形的相关积分公式 在 xyxyxy 平面中, 通过三个点 (xi,yi),(xj,yj),(xm,ym)(x_i, y_i), (x_j, y_j), (x_m, y_m)(xi,yi),(xj,yj),(xm,ym) 定义一个三角形, 令坐标原点位于其中心(或者重心)…...
【docker-compose】安装mongodb
1. 安装方式 压缩包容器安装docker(推荐,一分钟安装) 2. 环境 linux服务器已安装好 docker docker-compose (不了解的客官,请点击进入) 3. 步骤: Step 1: linux下建立如下目录…...
【ClickHouse源码】物化视图的写入过程
本文对 ClickHouse 物化视图的写入流程源码做个详细说明,基于 v22.8.14.53-lts 版本。 StorageMaterializedView 首先来看物化视图的构造函数: StorageMaterializedView::StorageMaterializedView(const StorageID & table_id_,ContextPtr local_…...
.NET 使用NLog增强日志输出
引言 不管你是开发单体应用还是微服务应用,在实际的软件的开发、测试和运行阶段,开发者都需要借助日志来定位问题。因此一款好的日志组件将至关重要,在.NET 的开源生态中,目前主要有Serilog、Log4Net和NLog三款优秀的日志组件&…...
一道阿里类的初始化顺序笔试题
问题很简单,就是下面的代码打印出什么? public class InitializeDemo {private static int k 1;private static InitializeDemo t1 new InitializeDemo("t1" );private static InitializeDemo t2 new InitializeDemo("t2");priv…...
cuda找不到路径报错
编译C文件时出现:error: [Errno 2] No such file or directory: :/usr/local/cuda:/usr/local/cuda/bin/nvcc 在终端输入: export CUDA_HOME/usr/local/cuda...
Elasticsearch进阶之(核心概念、系统架构、路由计算、倒排索引、分词、Kibana)
Elasticsearch进阶之(核心概念、系统架构、路由计算、倒排索引、分词、Kibana) 1、核心概念: 1.1、索引(Index) 一个索引就是一个拥有几分相似特征的文档的集合。比如说,你可以有一个客户数据的索引&…...
Android包体积缩减
关于减小包体积的方案: 一、所有的图片压缩,采用webp 格式。 (当然有些图片采用webp格式反而变大了,可以仍采用png格式) 二、语音资源过滤 只保留中文 resConfigs "zh-rCN", "zh” 可以减少resourc…...
【华为OD机试】 网上商城优惠活动(C++ Java Javascript Python)
文章目录 题目描述输入描述输出描述备注用例题目解析C++JavaScriptJavaPython题目描述 某网上商场举办优惠活动,发布了满减、打折、无门槛3种优惠券,分别为: 每满100元优惠10元,无使用数限制,如100199元可以使用1张减10元,200299可使用2张减20元,以此类推;92折券,1次…...
GWT安装过程
1:安装前准备 (可以问我要) appengine-java-sdk-1.9.8 com.google.gdt.eclipse.suite.4.3.update.site_3.8.0 gwt-2.5.1 eclipse-jee-kepler-SR2-win32-x86_64.zip 2:安装环境上 打开eclipse Help –Install New Software… 选择Add –…...
代码随想录算法训练营第一天| 704. 二分查找、27. 移除元素
Leetcode 704 二分查找题目链接:704二分查找介绍给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。思路先看看一个…...
office@word@ppt启用mathtype组件方法整理
文章目录将mathtype添加到word中ref查看office安装路径文件操作法Note附PPT中使用mathtype将mathtype添加到word中 先安装office,再安装mathtype,那么这个过程是自动的如果是先安装mathtype,再安装office,那么有以下选择: 重新安装一遍mathtype(比较简单,不需要说明)执行文件操…...
跨平台的Web应用快速开发框架
跨平台的Web应用快速开发框架。该框架提供了一套标准化的项目结构规范、统一的API接口命名规则、规范化的前后端代码,支持基于同一套设计规范Python(Flask/Django)、PHP、Java(SpringBoot/SSM)等多种后端语言代码 &…...
【仿真实战】AnyLogic地铁站客流仿真:从零搭建带安检与限流的多层车站模型
1. 从零开始搭建地铁站仿真模型 第一次接触AnyLogic做地铁站客流仿真时,我完全被各种模块和参数搞晕了。后来在几个实际项目中摸爬滚打,终于总结出一套小白也能快速上手的方法。这次我们就来搭建一个包含安检区和限流措施的多层地铁站模型,整…...
别再只会用点号了!Python里getattr()的5个实战骚操作,让你的代码更灵活
别再只会用点号了!Python里getattr()的5个实战骚操作,让你的代码更灵活 在Python开发中,我们经常需要动态地访问对象的属性和方法。虽然直接使用点号(.)是最常见的做法,但在某些场景下,getattr()函数能带来更灵活、更优…...
AI编程助手与代码质量守护:Trunk Cursor插件实战指南
1. 项目概述:当AI编程助手遇上代码质量守护者如果你和我一样,日常重度依赖Cursor这类AI编程助手来加速开发,那么你一定也遇到过类似的困扰:AI生成的代码片段虽然功能上“能用”,但在代码风格、格式一致性、甚至是潜在的…...
自动化测试(十) 微服务测试策略-单元到集成到契约到端到端分层实战
微服务测试策略:单元→集成→契约→端到端分层实战前面咱们分别聊了单元测试、接口测试、契约测试。今天把它们串起来,聊聊微服务架构下怎么设计完整的测试策略——每一层测什么、怎么测、用什么工具。一、微服务测试的"金字塔"变体 单体应用的…...
qmcdump:3步轻松解锁QQ音乐加密文件,实现跨设备音乐自由
qmcdump:3步轻松解锁QQ音乐加密文件,实现跨设备音乐自由 【免费下载链接】qmcdump 一个简单的QQ音乐解码(qmcflac/qmc0/qmc3 转 flac/mp3),仅为个人学习参考用。 项目地址: https://gitcode.com/gh_mirrors/qm/qmcdu…...
低成本传感器动态校准:SenDaL框架原理与应用
1. 低成本传感器校准的行业痛点与SenDaL解决方案在智能家居和工业物联网领域,我们经常面临一个尴尬的境地:高精度传感器价格昂贵难以大规模部署,而低成本传感器的数据质量又令人担忧。以PM2.5监测为例,专业级β射线传感器的价格可…...
Gemini3.1Pro:商业分析框架搭建神器
做咨询的人都知道,真正难的从来不是“找到信息”,而是“把信息组织成框架”。 很多商业分析问题看起来复杂,本质上都是在有限时间内,把零散材料整理成一个能支撑判断的逻辑结构。如果你经常做行业分析、竞品分析、市场调研、经营诊…...
告别手动配置!用Tcl脚本一键生成RFSoC RF-ADC/DAC IP核(Vivado 2023.2)
告别手动配置!用Tcl脚本一键生成RFSoC RF-ADC/DAC IP核(Vivado 2023.2) 在FPGA开发中,RFSoC平台的RF数据转换器配置往往是项目迭代中最耗时的环节之一。每次新建工程或调整参数时,开发者都需要在Vivado GUI中重复点击数…...
收藏 | 程序员小白也能掌握大模型开发,AI时代大有可为!
收藏 | 程序员小白也能掌握大模型开发,AI时代大有可为! 本文针对非AI专业背景的程序员,介绍了如何参与大模型应用开发。内容涵盖大模型基础、提示词编写与提示工程技巧,以及使用OpenAI API和LangChain框架进行应用开发的关键步骤。…...
