数据脱敏的处理方法及查询-程序员宅基地

技术标签: ViewUI  前端  数据库  大数据  

【摘要】 

 关键词:集算器、SPL、数据脱敏、报表 

1)、数据脱敏是“指对某些敏感信息通过脱敏规则进行数据的变形,实现敏感隐私数据的可靠保护。在涉及客户安全数据或者一些商业性敏感数据的情况下,在不违反系统规则条件下,对真实数据进行改造并提供测试使用,如身份证号、手机号、卡号、客户号等个人信息都需要进行数据脱敏。是数据库安全技术之一。” 

2)、本文介绍的脱敏数据报表查询将利用润乾集算器编写 SPL 脚本,对敏感信息字段 (如: 姓名、证件号、银行账户、住址、电话号码、企业名称、工商注册号、纳税人识别号) 等通过预定义的脱敏规则进行数据脱敏、变形,实现敏感隐私数据的保护。

 3)、润乾集算器能使脱敏工作变得的简单易行,同时可以减少大量重复性工作。通过集算器 SPL 脚本实现的脱敏数据,可直接作为报表数据集进行查询分析,也可以作为开发、测试和其它非生产环境或外包环境下的真实数据集使用。

数据脱敏的处理方法及查询

1.1  数据脱敏介绍

根据百度词条的解释,数据脱敏是“指对某些敏感信息通过脱敏规则进行数据的变形,实现敏感隐私数据的可靠保护。在涉及客户安全数据或者一些商业性敏感数据的情况下,在不违反系统规则条件下,对真实数据进行改造并提供测试使用,如身份证号、手机号、卡号、客户号等个人信息都需要进行数据脱敏。是 数据库安全 技术之一, 数据库安全 技术主要包括:数据库漏扫、 数据库加密 数据库防火墙 数据脱敏 数据库安全审计系统 。”

随着信息时代的发展,我们对数据信息的安全要求越来越重视,比如对非生产环境下的敏感数据的脱敏保护。在金融、运营商、政府、能源等部门,非生产环境下数据脱敏已列入监管部门的法规要求。非生产环境数据多用于开发、测试、培训以及第三方数据分析、挖掘,如果不能有效实施敏感数据保护,极易造成敏感数据的泄露。所以,保证非生产数据的安全已经成为一个重要的课题,要求我们能够通过对敏感信息进行脱敏、变形,实现有效的数据保护。

1.2  对数据脱敏工具的要求

数据脱敏工具应该具有对多种异构数据源的支持,从而将一个脱敏规则应用于不同的数据源,比如针对“客户名称”字段的修改,脱敏规则基本一致,所以应该可以在 Excel、TXT、Oracle、MS SQLServer、MySQL、Hadoop 等数据源上直接引用。另外,工具还应支持将脱敏数据完全不落地分发,提供文件到文件、文件到数据库、数据库到数据库、数据库到文件等方式,并且不需要在生产系统或本地安装任何客户端。

本文介绍的脱敏数据报表查询将利用润乾集算器编写 SPL 脚本,对敏感信息字段 ( 如: 姓名、证件号、银行账户、住址、电话号码、企业名称、工商注册号、纳税人识别号) 等通过预定义的脱敏规则进行数据脱敏、变形,实现敏感隐私数据的保护。

润乾集算器能使脱敏工作变得的简单易行,同时可以减少大量重复性工作。通过集算器 SPL 脚本实现的脱敏数据,可直接作为报表数据集进行查询分析,也可以作为开发、测试和其它非生产环境或外包环境下的真实数据集使用。

1.3  脱敏数据的特征

数据脱敏不仅要执行数据漂白,抹去数据中的敏感内容,同时也需要保持原有的数据特征、业务规则和数据关联性,保证开发、测试、培训以及大数据类业务不会受到脱敏的影响,达成脱敏前后的数据一致性和有效性:

l   保持原有数据特征

数据脱敏前后必须保证数据特征的保持,例如:身份证号码由十七位数字本体码和一位校验码组成,分别为区域地址码(6 位)、出生日期(8 位)、顺序码(3 位)和校验码(1 位)。那么身份证号码的脱敏规就需要保证脱敏后依旧保持这些特征信息。

l   保持数据之间的一致性

在不同业务中,数据和数据之间具有一定的关联性。例如:出生年月或年龄和出生日期之间的关系。同样,身份证信息脱敏后仍需要保证出生年月字段和身份证中包含的出生日期之间的一致性。

l   保持业务规则的关联性

保持数据业务规则的关联性是指数据脱敏时数据关联性以及业务语义等保持不变,其中数据关联性包括:主、外键关联性、关联字段的业务语义关联性等。特别是高度敏感的账户类主体数据往往会贯穿主体的所有关系和行为信息,因此需要特别注意保证所有相关主体信息的一致性。

l   多次脱敏之间的数据一致性

相同的数据进行多次脱敏,或者在不同的测试系统进行脱敏,需要确保每次脱敏的数据始终保持一致性,只有这样才能保障业务系统数据变更的持续一致性以及广义业务的持续一致性。

1.4  数据脱敏应用场景

一般常见的数据脱敏场景,是将生产数据或是生产数据文件按照脱敏规则,将数据不落地脱敏至测试数据库或是测试数据文件中,具体如下所示:

1542086793983100.png

使用集算器的 SPL 可以按照业务场景要求自行定义和编写脱敏规则,比如针对上面的人员信息:姓名、身份证号、地址、电话号码、卡号等进行不落地脱敏,满足数据脱敏需要。

集算器是一个无框架,可快速部署开发的数据计算中间件工具,能够直接运行编写好的 SPL 数据脱敏脚本即时进行数据脱敏,支持各种常见的数据脱敏的处理方式,包括数据替换、无效化、随机化、偏移和取整、掩码屏蔽、灵活编码等,本文介绍的数据脱敏方法都可以在实际应用中混合替换使用。

本文中应用场景的数据脱敏都是基于下表数据内容进行的,数据存储在“数据脱敏验证表.txt”文件中。

1542086794119100.png

1.4.1 数据替换

数据脱敏要求: 用设置的固定虚构值替换真值。例如将手机号码统一替换为 13800013800。

使用集算器 SPL 编码实现的脚本,如下:

image.png

A1:导入“数据脱敏验证表”的文本数据。手机号码脱敏前的显示值如下:

1542086794252100.png

A2:将手机号码统一数据替换。直接使用 run() 函数对 mobile 手机号码字段数据进行赋值替换为13800013800。数据替换后,手机号码脱敏后的显示值如下:

1542086794414100.png

1.4.2 无效化

数据脱敏要求: 通过对数据值得截断、加密、隐藏等方式使敏感数据脱敏,使其不再具有利用价值,例如将地址以 ****** 代替真值。数据无效化与数据替换所达成的效果基本类似。

使用集算器 SPL 编码实现的脚本,如下:

image.png

A1:导入“数据脱敏验证表”的文本数据。地址脱敏前显示值如下:

1542086794545100.png

A2:将地址进行数据隐藏式的无效化脱敏。直接使用 run() 函数对 address 地址字段数据进行无效化的 ****** 处理。数据无效化后,地址脱敏后的显示值如下:

1542086794710100.png

A3:将地址进行数据截断式的无效化脱敏。使用 left() 函数对 address 地址源字符串的左边三位字串加上 ****** 的截断无效化处理。截断无效化的地址脱敏后显示值如下:

1542086794836100.png

1.4.3 随机化

数据脱敏要求: 采用随机数据代替真值,保持替换值的随机性以模拟样本的真实性。例如用随机生成的姓和名代替真值。

使用集算器 SPL 编码实现的脚本,如下:

image.png

A1:导入外部姓名字典表,用于随机化替换姓名真值。此处需特别注意一下,由于“姓氏”和“名字”文本数据都是单列数据表,在使用 import() 函数时需要增加 @i 选项,@i 表示文本数据只有1列时返回成序列,在单元格 A3 中可以直接位置获取随机值。

A2:导入“数据脱敏验证表”的文本数据。姓名脱敏前显示值如下:

1542086794988100.png

A3:将姓名进行随机化脱敏。直接使用 run() 函数对 name 姓名进行随机化,使用 rand() 函数从“姓氏.txt”和“名字.txt”外部字典表随机化组合生成姓名。随机化后姓名的显示值如下:

1542086795140100.png

【注意】这个例子中我们针对数据脱敏引入了外部字典表,实际情况中可以根据数据脱敏要求,随时引入任意外部字典表,通过数据的随机化组合,实现替换真值数据的脱敏处理。

1.4.4 偏移和取整

数据脱敏要求: 通过随机移位改变数字数据,例如日期 2018-01-02 8:12:25 变为 2018-01-02 8:00:00,偏移取整在保持了数据的安全性的同时保证了范围的大致真实性,此项功能在大数据利用环境中具有重大价值。

使用集算器 SPL 编码实现的脚本,如下:

image.png

A1:导入“数据脱敏验证表”的文本数据。操作日期脱敏前显示值如下:

1542086795298100.png

A2:将操作日期进行时间的偏移和取整脱敏。使用使用 string() 函数按照偏移和取整规则格式化成“yyyy-MM-dd HH:00:00”格式,操作时间脱敏后的显示值如下:

1542086795424100.png

【注意】脱敏后的日期时间保持了原有的数据特征,方便脱敏数据的后续使用。

1.4.5 掩码屏蔽

数据脱敏要求: 掩码屏蔽是针对账户类数据的部分信息进行脱敏时的有力工具,比如银行卡号或是身份证号的脱敏。

使用集算器 SPL 编码实现的脚本,如下:

image.png

A1:导入“数据脱敏验证表”的文本数据。身份证号脱敏前显示值如下:

1542086795567100.png

A2:将身份证号的出生日期进行掩码屏蔽脱敏。使用 left() 函数截取身份证号的左边 6 位 + 字符串 ********+ right() 函数截取身份证号右边 4 位替换源身份证字符串,身份证号码脱敏后的显示值如下:

1542086795689100.png

1.4.6 灵活编码

数据脱敏要求: 在需要特殊脱敏规则时,可执行灵活编码以满足各种可能的脱敏规则。比如用固定字母和固定位数的数字替代合同编号真值。

使用集算器 SPL 编码实现的脚本,如下:

image.png 码 

A1:导入“数据脱敏验证表”的文本数据。合同编号脱敏前显示值如下:

1542086795819100.png

A2:将合同编号进行自定义编码脱敏。自定义编码规则:4 位固定码 + 当前年份 + 源目标字符串 4 位号码 +9 位数值组成,使用的函数已有介绍,不再赘述,合同编号脱敏后显示值如下:

1542086795964100.png

1.4.7 脱敏数据的分发

集算器 SPL 支持文件到文件、文件到数据库、数据库到数据库、数据库到文件的脱敏数据分发。下面分别进行具体说明:

1.4.7.1    文本分发到文本

使用集算器 SPL 编码实现的文本分发到文本的脚本如下:

image.png

A1-B1:引入外部字典表“姓氏”和“名字”的文本数据,用于随机组合生成姓名信息。

A2:使用游标导入大数据量的“数据脱敏验证表”文本数据。

A3:按照脱敏规则进行数据表脱敏。

A4:直接将脱敏的数据导出到文本文件。使用 export() 函数导出脱敏数据,其中,其中 @t 指定将第一行记录作为字段名, 如果不使用 @t 选项就会以 _1,_2,…作为字段名,@a表示追加写, 不使用 @a 表示覆盖,分发到文本的脱敏结果如下:

1542086796250100.png

【注意】集算器 SPL 的文件处理能力还支持导入、导出 xls、xlsx、csv 等多种类型文件。

1.4.7.2    文本分发到数据库

使用集算器 SPL 编码实现的文本分发到数据库(以 MySQL 为例)的脚本如下:

image.png

A1-A3:同上。

A4:连接 MySQL 数据源。使用 connect() 进行 MySQL 数据库的连接。如果用鼠标点击 A4 单元格,可以直接查看 MySQL 数据库的连接信息。具体查看 数据库配置 教程相关章节文档配置说明。

A5:更新 MySQL 数据库中“personinfo”库表的数据。使用 update() 将单元格 A3 的游标数据更新到 MySQL 数据库“personinfo”库表中。使用数据库工具查看结果如下

1542086796366100.png

A6:使用 close() 函数关闭 A4 建立起的 MySQL 数据源连接。

1.4.7.3    数据库分到数据库

使用集算器 SPL 编码实现的数据库分发到数据库的脚本如下(均以 MySQL 为例):

image.png

A1:同上。

A2:连接 MySQL 数据源。

A3:游标读取 MySQL 中表“personinfo_copy”的待脱敏数据。该表的数据如下:

1542086796565100.png

A4:同上。

A5:更新 MySQL 数据库中“personinfo_copy_test”库表的数据。使用 update() 将单元格 A3 的游标数据更新到 MySQL 数据库的“personinfo_copy_test”库表中。结果如下:

1542086797099100.png

A6:使用 close() 函数关闭 A2 建立起的 MySQL 数据源连接。

1.4.7.4    数据库分到文本

使用集算器 SPL 编码实现的数据库(以 MySQL 为例)分发到文本的脚本如下:

image.png

A1-A4:同上。

A5:直接将脱敏的数据库(MySQL)数据分发到文本文件。分发到文本的脱敏结果同上。

A6:使用 close() 函数关闭 A2 建立起的 MySQL 数据源连接。

1.5  脱敏数据报表查询实例

下面我们就结合上面介绍的数据脱敏方法,具体实现一个可以动态配置是否脱敏数据的报表查询实例,大致流程如下: 1542086797281100.png

1.5.1 集算器数据脱敏 SPL 脚本准备

   利用上面已有的"数据脱敏验证表.txt" 文本数据,实现脱敏数据报表查询,具体脚本如下:

image.png

A1-B1:引入外部字典表“姓氏”和“名字”的文本数据,用于随机组合生成姓名信息。

A2:定义一个子程序。使用 func 函数定义一个通用的数据脱敏规则处理子程序,该子程序主要是调用配置文件中的数据脱敏规则进行数据脱敏。不同数据字段可以根据自身特点和业务要求进行规则复用。关于子程序的内容可以参考:集算器 -> 教程 -> 高级代码 -> 子程序 文档说明。

B3:读取数据脱敏规则配置文件信息。使用 property() 函数从“数据脱敏规则配置.ini”属性文件中读取 type 属性值。

B4-B5:使用动态解析并计算规则配置文件中的规则,实现对应字段的数据脱敏处理。其中,子程序中使用 eval() 函数动态解析并计算表达式,实现动态解析并替换脱敏规则配置文件(*.ini)中的 "?" 值,增加一个 type 值判断,将一般 type 中的 "?" 替换为调用 func 子程序主格的位置值,对引入外部数据字典表的 tpye2 规则,单独判断替换 "?" 值为外部字典所在单元格值,最终计算替换的表达式并执行对应字段的数据脱敏。

B6:使用宏动态计算表达式并返回运算结果,使用 return 函数将从属性配置文件中读取的 type 属性值通过 “${}”宏 替换并返回运算结果给被 B9 单元格调用的程序中。

A7:游标获取未脱敏的源端生产数据。

A8:通过传递的网格参数 type(type=0:不脱敏)值判断是否对数据脱敏,如果脱敏,则执行 B9 单元格的源端生产数据的脱敏处理。

B9:按照脱敏规则进行数据表脱敏,直接调用 A2 主格子程序 func 进行数据脱敏。

A10:根据 type 值返回对应的脱敏或未脱敏数据。

接下来,需要在集算器设计器的功能菜单“程序 -> 网格参数”中设置一个参数“type”,用于接收报表参数传递进行是否脱敏的数据权限控制。

1542086797418100.png

至此,集算器的 SPL 脚本编写和设置完成,下一步进行“数据脱敏规则配置.ini”文件的新建设置。

1.5.2 数据脱敏规则配置文件

文件“数据脱敏规则配置.ini”为集算器 SPL 脚本提供了对数据字段的脱敏规则配置,从而实现脱敏规则与脚本分离的设计,可以在不修改脚本的情况下自定义脱敏规则。当然,这个配置文件也可以数存储在数据库中,提供全局的脱敏规则配置管理。该配置文件的内容如下:

1542086797537100.png

配置文件说明: #自定义配置脱敏规则,使用 eval() 函数实现动态解析替换解析 "?",通常 type 中的 "?" 是指固定调用 func 子程序的主格,这里 tpye2 规则特殊,需要单独判断替换 "?"。

【注意】这里仅是提供一种脱敏规则的配置思路,目的是可以最大限度的复用和灵活调用,相似的数据字段就不需要重复定义和编写脱敏规则了。实际应用中,程序员们可以根据需求自定义配置。

1.5.3 报表模板准备

使用最新版本的润乾报表 V2018 版本开发一张报表模板,并设置报表是否脱敏参数“type”(与集算器 SPL 脚本中的网格参数对应使用)。

1542086798021100.png

设置集算器 SPL 脚本为报表的数据集“ds1”,选中对应的 dfx 脚本,并配置 type 参数表达式,具体如下:

1542086798108100.png

开发的报表模板“报表数据脱敏.rpx”如下:

1542086798248100.png

【注意】这里面调用的集算器数据集返回的是游标,需要在报表属性 -> 常规 设置集算器数据集为大数据集,并且该功能需要报表产品包含集算器授权。

1542086798359100.png

1.5.4 脱敏数据报表发布

直接在报表设计器中启动 web 服务,使用浏览器浏览报表,当设置参数 type 值为“0”不脱敏时,报表展示数据如下:

1542086798478100.png

当参数 type 设置非“0”值时,报表展示数据如下:

1542086798675100.png

1.5.5 脱敏数据报表查询总结

这个脱敏数据报表查询实例有以下四个特点:

l   1)直接对源数据脱敏后在报表 WEB 端进行数据查询和展示。

没有按常规数据脱敏的方式,先将脱敏数据进行分发入库或入文件,而是直接将数据使用集算器 SPL 脚本进行脱敏,配合报表的大数据集异步数据加载实现了大数据的即时脱敏数据查询展示。免去源数据脱敏 -> 目标入库 -> 数据展示的目标入库步骤。

l   2)免去新建数据脱敏库步骤,减少脱敏工作量。

为了应对一些老项目或特殊情况,比如脱敏的数据表都是明文显示,但是不能分发或新建脱敏后的数据库表,通过对明文数据直接抽取加密,免去新建脱密库步骤,减少整体脱敏工作量。

l   3)自定义配置数据脱敏规则。

可以灵活配置规则文件,满足不同的规则配置需求。

l   4)动态控制数据是否开启脱敏权限。

可以根据平台用户查看数据的权限,动态的传递参数值控制是否对数据进行脱敏显示,一方面防止数据的泄密,从底层保证数据安全,另一方面也为高权限客户提供查看敏感数据的途径。


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/31543054/viewspace-2287072/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/31543054/viewspace-2287072/

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/cowjlymz7800977460/article/details/100504200

智能推荐

docker — 容器存储_docker 保存容器-程序员宅基地

文章浏览阅读2.2k次。①Storage driver 处理各镜像层及容器层的处理细节,实现了多层数据的堆叠,为用户 提供了多层数据合并后的统一视图②所有 Storage driver 都使用可堆叠图像层和写时复制(CoW)策略③docker info 命令可查看当系统上的 storage driver主要用于测试目的,不建议用于生成环境。_docker 保存容器

OKHTTP3的依赖包与 权限_okhttp3 依赖包-程序员宅基地

文章浏览阅读2.1k次。依赖包: compile 'com.squareup.okio:okio:1.5.0' compile 'com.squareup.okhttp3:okhttp:3.2.0' compile 'com.squareup.okhttp3:logging-interceptor:3.4.1' compile 'com.google.code.gson:gson:2.8.2'_okhttp3 依赖包

Windows 10 桌面路径修改问题解决方案_无法更改桌面路径-程序员宅基地

文章浏览阅读150次。最近我遇到了一个问题,我在 Windows 10 上不小心修改了桌面路径,但现在无法将其改回原来的路径。我想知道如何通过编程来解决这个问题。要解决这个问题,我们可以使用编程来修改桌面路径。下面是一个使用 Python 编程语言的示例,演示了如何通过注册表修改桌面路径。在修改桌面路径后,你可能需要重新启动 Windows Explorer 进程以使更改生效。如果你有任何其他问题,请随时提问。注意:在运行以上代码之前,请确保你具有管理员权限。函数来将桌面路径修改为新路径。变量设置为你想要的新路径,并调用。_无法更改桌面路径

VoLTE的前世今生...说清楚VoIP、VoLTE、CSFB、VoWiFi、SIP、IMS那些事_volte视频转语音原因-程序员宅基地

文章浏览阅读1.4k次,点赞3次,收藏22次。VoLTE就像一位优雅的败家姑娘,千呼万唤使出来!难免有人会在VoLTE与VoIP之间打量对比。关于两者之间的对比分析太多,尽管如此,也是依然一头雾水。我们今天就从她们的前世说起,希望能够说清楚关于VoIP、VoLTE、CSFB、VoWiFi、SIP、IMS那些事...从VoIP到VoLTE观察家们认为VoIP的出现起始于1995年,那个时候GSM刚进入中国。20年来,VoIP语音服..._volte视频转语音原因

JAVA中使用JSON进行数据传递_java 如何实现 动态json里面有个json 想js 一样进行连点拿去数据-程序员宅基地

文章浏览阅读773次。最近在做一个基于JAVA Servlet的WEB应用以及对应的Anroid应用客户端的开发工作。其中,在接口的访问和数据的传输方面使用的比较多的是使用JSON对象来操作格式化数据:在服务器端采用JSON字符串来传递数据并在WEB前端或者Android客户端使用JSON来解析接收到的数据。首先,在JAVA中使用JSON需要引入 org.json 包(点击这里 可以下载相应的JAR包!_java 如何实现 动态json里面有个json 想js 一样进行连点拿去数据

java对接Modbus_java modbus-程序员宅基地

文章浏览阅读1.6k次,点赞3次,收藏11次。Modbus是一种单主站的主/从通信模式,它定义了一种通讯规范,用于在工业自动化系统中实现设备之间的数据交换。Modbus网络上只能有一个主站存在,主站在Modbus网络上没有地址,而从站的地址范围为0-247,其中0为广播地址,从站的实际地址范围为1-247。Modbus通信协议可以通过多种传输方式传播,如RS232C、RS485、光纤和无线电等。它具有两种串行传输模式,即ASCII和RTU,它们定义了数据如何打包和解码的方式。_java modbus

随便推点

网络拓扑结构_网络拓扑csdn-程序员宅基地

文章浏览阅读834次,点赞27次,收藏13次。网络拓扑结构是指计算机网络中各组件(如计算机、服务器、打印机、路由器、交换机等设备)及其连接线路在物理布局或逻辑构型上的排列形式。这种布局不仅描述了设备间的实际物理连接方式,也决定了数据在网络中流动的路径和方式。不同的网络拓扑结构影响着网络的性能、可靠性、可扩展性及管理维护的难易程度。_网络拓扑csdn

JS重写Date函数,兼容IOS系统_date.prototype 将所有 ios-程序员宅基地

文章浏览阅读1.8k次,点赞5次,收藏8次。IOS系统Date的坑要创建一个指定时间的new Date对象时,通常的做法是:new Date("2020-09-21 11:11:00")这行代码在 PC 端和安卓端都是正常的,而在 iOS 端则会提示 Invalid Date 无效日期。在IOS年月日中间的横岗许换成斜杠,也就是new Date("2020/09/21 11:11:00")通常为了兼容IOS的这个坑,需要做一些额外的特殊处理,笔者在开发的时候经常会忘了兼容IOS系统。所以就想试着重写Date函数,一劳永逸,避免每次ne_date.prototype 将所有 ios

如何将EXCEL表导入plsql数据库中-程序员宅基地

文章浏览阅读5.3k次。方法一:用PLSQL Developer工具。 1 在PLSQL Developer的sql window里输入select * from test for update; 2 按F8执行 3 打开锁, 再按一下加号. 鼠标点到第一列的列头,使全列成选中状态,然后粘贴,最后commit提交即可。(前提..._excel导入pl/sql

Git常用命令速查手册-程序员宅基地

文章浏览阅读83次。Git常用命令速查手册1、初始化仓库git init2、将文件添加到仓库git add 文件名 # 将工作区的某个文件添加到暂存区 git add -u # 添加所有被tracked文件中被修改或删除的文件信息到暂存区,不处理untracked的文件git add -A # 添加所有被tracked文件中被修改或删除的文件信息到暂存区,包括untracked的文件...

分享119个ASP.NET源码总有一个是你想要的_千博二手车源码v2023 build 1120-程序员宅基地

文章浏览阅读202次。分享119个ASP.NET源码总有一个是你想要的_千博二手车源码v2023 build 1120

【C++缺省函数】 空类默认产生的6个类成员函数_空类默认产生哪些类成员函数-程序员宅基地

文章浏览阅读1.8k次。版权声明:转载请注明出处 http://blog.csdn.net/irean_lau。目录(?)[+]1、缺省构造函数。2、缺省拷贝构造函数。3、 缺省析构函数。4、缺省赋值运算符。5、缺省取址运算符。6、 缺省取址运算符 const。[cpp] view plain copy_空类默认产生哪些类成员函数

推荐文章

热门文章

相关标签