自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(123)
  • 收藏
  • 关注

原创 C++项目--高并发内存池

目录一、项目介绍二、内存池介绍2.1 池化技术2.2 内存池2.3 内存池主要解决的问题2.4 malloc三、定长内存池的实现3.1 定长内存池概念3.2 内存池管理释放对象3.3 内存池申请对象3.4 定长内存池整体代码3.5 性能对比四、高并发内存池整体框架设计4.1 该项目解决的问题4.2 整体框架结构4.3 各部分的主要作用五、threadcache5.1 threadcache整体设计5.2 threadcache哈希桶映射对齐规则5.2.1 映射对齐规则5.2.2 空间浪费率5.2.3 对齐和

2024-03-07 20:27:24 473

原创 MarkDown基础

1.使用=和-表示一级标题2.使用#、##、###、####、######、######表示一级至六级标题。

2024-06-22 16:35:38 1058

原创 MFC--基于vs2013入门教程

在我们使用任意一种方法添加了消息处理函数以后,都只能得到一个空的OnBnClickedAddButton()函数的函数体,要实现我们想要的功能,还需要在函数体中加入自定义功能代码。在加法计算器程序中,我们想要“计算”按钮实现的功能是,获取被加数和加数的数值,然后计算它们的和并显示到和的编辑框里。// TODO: 在此添加控件通知处理程序代码// 将各控件中的数据保存到相应的变量// 将被加数和加数的加和赋值给m_editSum// 根据各变量的值更新相应的控件。

2024-06-22 16:02:18 1391

原创 CSV文件的格式规范

金山文档(或类似的办公软件)导出的CSV(Comma-Separated Values,逗号分隔值)文件,遵循CSV文件的标准格式约定。因此,当你在Notepad++中看到用逗号自动分隔,且有多个逗号的数据被双引号包围的情况,这表明金山文档在导出CSV文件时正确遵守了CSV格式的规范,使得数据能够在其他支持CSV格式的软件中正确地导入和解析。如果数据中的双引号也是数据的一部分,则通过在内部双引号前再添加一个双引号进行转义,即 “” 表示一个实际的双引号字符。“这是一个测试,”“带逗号”“的句子。

2024-05-12 10:48:04 1970

原创 C语言-程序环境和预处理

_FILE__ //进行编译的源文件__LINE__ //文件当前的行号__DATE__ //文件被编译的日期__TIME__ //文件被编译的时间__STDC__ //如果编译器遵循ANSI C,其值为1,否则未定义许多C 的编译器提供了一种能力,允许在命令行中定义符号。用于启动编译过程。

2024-05-04 23:22:27 663

原创 C语言-文件操作

每个被使用的文件都在内存中开辟了一个相应的文件信息区,用来存放文件的相关信息(如文件的名字,文件状态及文件当前的位置等)。每当打开一个文件的时候,系统会根据文件的情况自动创建一个FILE结构的变量,并填充其中的信息,使用者不必关心细节。在编写程序的时候,在打开文件的同时,都会返回一个FILE*的指针变量指向该文件,也相当于建立了指针和文件的关系。因为有缓冲区的存在,C语言在操作文件的时候,需要做刷新缓冲区或者在文件操作结束的时候关闭文件。数据在内存中以二进制的形式存储,如果不加转换的输出到外存,就是。

2024-05-04 23:22:14 1147

原创 C语言-动态内存管理

C语言提供了一个动态内存开辟的函数//malloc申请到空间后直接返回这块空间的起始地址,不会初始化空间的内容这个函数向内存申请一块连续可用的空间,并返回指向这块空间的指针。如果开辟成功,则返回一个指向开辟好空间的指针。如果开辟失败,则返回一个NULL指针,因此malloc的返回值一定要做检查。返回值的类型是 void* ,所以malloc函数并不知道开辟空间的类型,具体在使用的时候使用者自己来决定。如果参数 size 为0,malloc的行为是标准是未定义的,取决于编译器。

2024-05-04 16:24:30 1037

原创 C语言-自定义类型:结构体,枚举,联合

有了结构体类型,那如何定义变量,其实很简单。int x;int y;}p1;//声明类型的同时定义变量p1//定义结构体变量p2//初始化:定义变量的同时赋初值。struct Stu //类型声明//名字int age;//年龄//初始化int data;//结构体嵌套初始化//结构体嵌套初始化位段的声明和结构是类似的,有两个不同:1.位段的成员必须是 int、unsigned int 或signed int。2.位段的成员名后边有一个冒号和一个数字。

2024-05-04 16:23:34 1087

原创 C语言-字符串函数和内存函数

字符串已经 ‘\0’ 作为结束标志,strlen函数返回的是在字符串中 ‘\0’ 前面出现的字符个数(不包含 ‘\0’ )。参数指向的字符串必须要以 ‘\0’ 结束。注意函数的返回值为size_t,是无符号的( 易错 )while (*s!s++;return 0;= '\0')s++;

2024-05-04 16:22:18 821

原创 C语言-指针详解

如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。2.&数组名,这里的数组名表示整个数组,&数组名取出的是整个数组的地址。整型指针–指向整型变量的指针,存放整型变量的地址的指针变量。字符指针–指向字符变量的指针,存放字符变量的地址的指着变量。数组指针–指向数组的指针,存放的是数组的地址的指针变量。类型的指针可以接收任意类型的地址。

2024-05-03 00:32:22 591

原创 C语言-数据在内存中的存储

字节序:是以字节为单位,讨论存储顺序的小端字节序存储:把一个数据的低位字节的内容,存放在低地址处,把一个数据的高位字节的内容,存放在高地址处。大端字节序存储把一个数据的低位字节的内容,存放在高地址处,把一个数据的高位字节的内容,存放在低地址处。

2024-05-03 00:31:48 46

原创 VS(Visual Studio)中查找项目里的中文字符

由于中文字符的Unicode范围大致在 \u4e00 到 \u9fff 之间(这包括了大部分常用的中文字符,但不包括一些扩展区域),你可以使用正则表达式 [\u4e00-\u9fff]+ 来匹配一个或多个连续的中文字符。不过,由于中文字符的范围非常广泛(包括简体中文、繁体中文、日本汉字、韩国汉字等),你可能需要定义一个大致的字符范围来执行查找。(3)如果你想要查找所有可能的中文字符(包括一些不常用的和扩展区域的字符),你可能需要扩大这个范围,但这会增加误报的可能性。打开你想要搜索的源代码文件或项目。

2024-05-02 23:01:17 1234 1

原创 C语言-调试技巧

Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序。Release 称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好地使用。F5:启动调试,经常用来直接跳到下一个断点处。F9:创建断点和取消断点,断点的重要作用,可以在程序的任意位置设置断点,这样就可以使得程序在想要的位置随意停止执行,继而一步步执行下去F10:逐过程,通常用来处理一个过程,一个过程可以是一次函数调用,或者是一条语句F11。

2024-05-02 22:58:04 809

原创 C语言-分支和循环语句、函数、数组、操作符、指针、结构体

告诉编译器有一个函数叫什么,参数是什么,返回类型是什么。但是具体是不是存在,函数声明决定不了。函数的声明一般出现在函数的使用之前。要满足先声明后使用。函数的声明一般要放在头文件中的。函数的定义是指函数的具体实现,交待函数的功能实现。

2024-05-01 22:16:53 1372

原创 C语言-整体内容简单的认识

sizeof是一个操作符,是计算机类型/变量所占内存空间的大小scanf函数返回的是读取到数据的个数,如果scanf函数读取失败会返回EOF(EOF end of file 文件结束标志,#define EOF -1)多组输入:while(scanf(“%d”,&q)==1) 如果读取到一个数就持续输入,否则返回EOFscanf函数每次读取一个字符,跳过所有的空白字符,直到遇到第一个非空白字符的时候才开始读取。并且在读取到第一个空白字符后结束读取,将空白字符之后的所有字符都暂存在缓冲区中。

2024-05-01 22:16:23 1111

原创 Git--项目开发模型

2. 在develop 下开发⼈员⾃测通过后,先确定下 develop 不存在未测试完毕的需求,然后研发⼈员可基于 develop 分⽀创建⼀个 release/xxx 分⽀出来,可交由测试⼈员进⾏测试。可基于 master 创建 hotfix/xxx 分⽀,修复完毕后发布到 master 验证,验证完毕后,将master 代码合并到 develop 分⽀,同时删掉 hotfix/xxx 分⽀。1.develop 为开发分⽀,基于master分⽀创建的只读且唯⼀分⽀,始终保持最新完成以及bug修复后的码。

2024-04-27 23:31:04 1033

原创 Git--多人协作

⾸先,可以试图⽤git push origin branch-name推送⾃⼰的修改;如果推送失败,则因为远程分⽀⽐你的本地更新,需要先⽤git pull试图合并;如果合并有冲突,则解决冲突,并在本地提交;没有冲突或者解决掉冲突后,再⽤git push origin branch-name推送就能成功!功能开发完毕,将分⽀merge进master,最后删除分⽀。

2024-04-27 23:17:59 1178

原创 Git--分布式版本控制系统

这就需要我们重新配置下了,同样要注意需要和gitee上配置的⽤⼾名和邮箱⼀致。顺利的话,可以在⽤⼾主⽬录⾥找到 .ssh ⽬录,⾥⾯有 id_rsa 和 id_rsa.pub 两个⽂件,这两个就是SSH Key的秘钥对, id_rsa 是私钥,不能泄露出去, id_rsa.pub 是公钥,可以放⼼地告诉任何⼈。实际情况往往是这样,找⼀台电脑充当服务器的⻆⾊,每天24⼩时开机,其他每个⼈都从这个“服务器”仓库克隆⼀份到⾃⼰的电脑上,并且各⾃把各⾃的提交推送到服务器仓库⾥,也从服务器仓库中拉取别⼈的提交。

2024-04-27 22:38:37 1187

原创 Git--分支的原理与使用

添加⼀个新功能时,你肯定不希望因为⼀些实验性质的代码,把主分⽀搞乱了,所以,每添加⼀个新功能,最好新建⼀个分⽀,我们可以将其称之为feature分⽀,在上⾯开发,完成后,合并,最后,删除该feature 分⽀。在Git中,每个bug都可以通过⼀个新的临时分⽀来修复,修复后,合并分⽀,然后将临时分⽀删除。⼲活都在dev分⽀上,也就是说,dev分⽀是不稳定的,到某个时候,⽐如1.0版本发布时,再把dev分⽀合并到master上,在master分⽀发布1.0版本;

2024-04-27 22:15:57 1142

原创 SVN--基本原理与使用(超详细)

1.为什么需要SVN版本控制软件我们想开发一个系统,需要张三,李四、王五三个人进行开发,每个人开发一个系统的某几个模块,我们称作协作开发。他们开发之间进行交流称作远程开发。最后合并成几个版本,如v1.0 、v2.0。这时候就需要SVN来进行版本管理,主要是三个功能:版本回退,协作开发,远程开发。2.解决之道SCM:(Software configuration management)软件配置管理,所谓的软件配置管理实际就是对软件源代码进行控制与管理CVS:元老级产品VSS:入门级产品。

2024-04-27 17:18:49 9932 2

原创 Git--原理与使用

需要说明的是,我们看到的⼀⼤串类似 23807c5…⽐如你新增了⼀⾏,这就是⼀个修改,删除了⼀⾏,也是⼀个修改,更改了某些字符,也是⼀个修改,删了⼀些⼜加了⼀些,也是⼀个修改,甚⾄创建⼀个新⽂件,也算⼀个修改。还需要再明确⼀点,所有的版本控制系统,Git也不例外,其实只能跟踪⽂本⽂件的改动,⽐如TXT⽂件,⽹⻚,所有的程序代码等等。注意 git commit后⾯的 -m 选项,要跟上描述本次提交的message,由用户自己完成,这部分内容绝对不能省略,并要好好描述,是⽤来记录你的提交细节,是给我们⼈看的。

2024-04-21 10:33:49 1055

原创 Windows下Git的使用

从信息中可以看到,更新远程仓库的信息被拒绝了,原因是远程仓库中包含了本地不具有的信息,就是远程仓库中的信息没有更新到本地仓库里面。最后想要推送到远程仓库就需要用push操作,点就左下角的push按钮,第一次push可能会让你输入用户名和密码,然后点击push,即可完成推送。出现推送后没有出现绿点的情况,可能是因为,你本地的用户和邮箱和远程仓库的邮箱不一致,需要将远程仓库的邮箱在本地中进行设置。这个问题出现的原因,基本就是别人在你后面又提交了一次,导致你本地的文件信息与远程仓库里的信息不一致。

2024-04-21 09:15:03 1097

原创 Linux--进程的概念(二)

现在说说main函数的前两个参数,main函数的第二个参数是一个字符指针数组,数组当中的第一个字符指针存储的是可执行程序的位置,其余字符指针存储的是所给的若干选项,最后一个字符指针为空,而main函数的第一个参数代表的就是字符指针数组当中的有效元素个数。容易理解的是,要执行一个可执行程序必须要先找到它在哪里,既然不带./就可以执行ls命令,说明系统能够通过ls名称找到ls的位置,而系统是无法找到我们自己的可执行程序的,所以我们必须带上./,以此告诉系统该可执行程序位于当前目录下。

2024-04-09 23:11:56 772

原创 牛客网-替换空格

例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。计算出替换后的字符串的长度后,我们可以在原字符串当中,从后往前进行填充。若遇到的不是空格,则将遍历到的字符从后往前进行填充。因为是‘ ’ ->“%20”,是1换3,所以可以先统计原字符串中空格的个数(设为count),然后可以计算出新字符串的长度。因为一个空格字符会被替换为三个字符,所以替换后字符串的新长度new_str=length+2*count。若遇到的是空格,则从后往前填充字符‘0’,‘2’,‘%’

2024-04-06 23:26:48 379

原创 Linux--进程的概念(一)

任何计算机系统都包含一个基本的程序集合,称为操作系统(OS)。内核(进程管理,内存管理,文件管理,驱动管理)其他程序(例如函数库,shell程序等)设计OS的目的(1)与硬件交互,管理所有的软硬件资源(2)为用户程序(应用程序)提供一个良好的执行环境定位一款纯正的“搞管理”的软件如何理解“管理”(1)管理的例子(2)描述被管理对象(3)组织被管理对象先描述,再组织上图就是一个计算机软硬件体系结构,操作系统也是软件(1)描述起来,用struct结构体,软件和硬件都是这样的。

2024-04-06 21:39:44 1326

原创 牛客JZ39-数组中出现次数超过一半的数字

首先需要考虑数组是否为空的情况,然后对数组从前往后进行抵消,如果相同,计数就+1,不同计数就-1,接着计算最后剩下的数字在整个数组中出现的次数,最后判断这个数出现的次数是否大于数组长度的一半,是就返回数值,否则返回0。首先对整个数组进行排序,然后计算中间数组的值,接着遍历整个数组,对目标值进行次数的统计,最后判断目标值出现的次数是否大于数组长度的一半,是则返回数值,否则返回0.例如输入一个长度为9的数组[1,2,3,2,2,2,5,4,2]。如果不存在则输出0。输入:[1,2,3,2,2,2,5,4,2]

2024-04-05 16:53:44 550

原创 软件测试-进阶篇

​  安全性测试的方法有代码评审,渗透测试,安全运维等,常用的静态安全测试工具有,Coverity,IBM Appscan Source,HPFortify,常用的动态安全测试有OWASP的ZAP,HP WebInspect等。​  软件只是一种工具,软件与人的信息交流是通过界面来进行的,界面是软件与用户交流的最直接的一层,界面的设计决定了用户对我们设计的软件的第一印象;但是灵活性的设计要把握好度,不然可能由于太多的用户状态和方式的选择,增加了软件设计的复杂性,和程序实现的难度。我们主要讨论以下几个方面。

2024-04-01 22:59:54 1064

原创 软件测试-用例篇

测试用例对应的功能已删除,不可操作了微信刚出来时与QQ可互发消息,下一个版本后就不可以发消息。执行一条测试用例未发现BUG,实际该处有BUG苹果7手机微信添加了mobile单车小程序,扫码不能开锁,只能使用mobile APP开锁,测试用例未涉及到苹果7微信小程序扫码开锁。执行一条测试用例发现了BUG苹果7手机微信添加了mobile单车小程序,用例已写到了苹果7微信添加moblie小程序扫码开锁,问题被发现。执行一条测试用例未发现BUG,实际该处BUG已修改。

2024-04-01 22:13:16 1108

原创 软件测试-基础篇

bug的定义每个公司都不一致,在定义级别之前需要查看公司规范以下为样例:(1)Blocker(崩溃):​  阻碍开发或测试工作的问题;造成系统崩溃、死机、死循环,导致数据库数据丢失,与数据库连接错误,主要功能丧失,基本模块缺失等问题。如:代码错误、死循环、数据库发生死锁、重要的一级菜单功能不能使用等(该问题在测试中较少出现,一旦出现应立即中止当前版本测试)(2)Critical(严重)​  系统主要功能部分丧失、数据库保存调用错误、用户数据丢失,一级功能菜单不能使用但是不影响其他功能的测试。

2024-04-01 21:19:03 1110

原创 软件测试-概念篇

(1)需求的定义​用户需求:可以简单理解为甲方提出的需求,如果没有甲方,那么就是终端用户使用产品时必须要完成的任务,该需求一般比较简略。​软件需求:或者叫功能需求,该需求会详细描述开发人员必须实现的软件功能。大多数公司在进行软件开发的时候会把用户需求转化为软件需求,开发人员和测试人员工作的直接依据就是软件需求。​软件需求是谁写?​产品经理。开发一个产品,或者测试一个产品,需要拿着软件需求进行测试/开发,还是拿着用户需求进行开发/测试?是软件需求。​。

2024-03-31 10:14:10 941

原创 软件测试-答疑篇

外观是否好看,WEB的UI自动化测试,APP的UI自动化,后端的接口进行测试,性能,安全…测试开发工程师:测试工程师的工作内容上加了一些开发工作(开发测试用例,开发测试工具,开发出来的测试工具让测试人员用,提高测试效率)测试:测试+开发执行(通常情况下,黑盒测试由测试人员执行,部分白盒测试、系统测试是由开发人员执行)通常情况下,大厂测试和开发的薪资是一样的,中小厂测试和开发的薪资比起来,测试是略低的。测试工程师、测试开发、测试其他、游戏测试、软件测试、自动化测试、性能测试、安全测试。

2024-03-31 10:01:21 563

原创 牛客JZ21-调整数组顺序使奇数位于偶数前面

可以通过左右下标的方法,left下标找到偶数,right下标找到奇数,然后进行交换,left是奇数就++left,right是偶数就–right,一次类推完成所有数据的交换,但是这种方式是无法保证奇数和奇数,还有偶数和偶数的相对位置不变的。首先遍历整个数组,查找数组中的奇数,找到后将它临时保存起来,然后将该奇数位置之前的所有偶数都向后移动一位,最后将该奇数放到移动后的空闲位置处,依次类推,就可以完成不改变顺序的奇数在前偶数在后的数组排序。输入:[2,4,6,5,7]输入:[1,3,5,6,7]

2024-03-26 14:21:29 824

原创 牛客JZ11-旋转数组的最小数字

有一个长度为 n 的非降序数组,比如[1,2,3,4,5],将它进行旋转,即把一个数组最开始的若干个元素搬到数组的末尾,变成一个旋转数组,比如变成了[3,4,5,1,2],或者[4,5,1,2,3]这样的。这个过程会让[left,right]区间缩小,这个过程中,left永远在原数组前半部分,right永远在原数组的后半部分,而范围会一直缩小,当left和right相邻时,right指向的位置,就是最小元素的位置。NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。输入:[3,4,5,1,2]

2024-03-25 21:43:22 865

原创 leetcode LCR121.寻找目标值-二维数组

我们可以找到行列的交界处,比如[0][2],即数字3这个位置,通过观察,我们可以发现,该数字是所在行中的最大数字,所在列中的最小数字,可以用目标数target和该交界处数字进行比较,:有一个二维数组,数组的每行从左到右都是递增的,每列从上到下都是递增的,在这样的数组中查找一个数字是否存在。直接对该二维数组进行遍历,但该种方法的时间复杂度为。如果用[2][0]也是可以的,思路则反过来。这个题目和杨氏矩阵是一样的。

2024-03-24 13:44:45 944

原创 C++进阶--C++11智能指针

智能指针不是指针,是一个管理指针的类,用来存储指向动态分配对象的指针,负责自动释放动态分配的对象,防止堆内存泄漏。动态分配的资源,交给一个类对象去管理,当类对象生命周期结束时,自动调用析构函数释放资源。RAII是resource acquisition is initialization的缩写,意为“资源获取即初始化”。它是 C++ 之父 Bjarne Stroustrup 提出的设计理念,其核心是把资源和对象的生命周期绑定,对象创建获取资源,对象销毁释放资源。

2024-02-07 21:15:28 2539

原创 C++进阶--C++11包装器

第一个参数传入函数指针,后面传入绑定的参数列表依次是placeholders::_1和placeholders::_2,表示后续调用新生成的可调用对象时,第一个参数传给placeholders::_1,第二个参数传给placeholders::_2。根本原因就是因为,后续调用新生成的可调用对象时,传入的第一个参数会传给placeholders::_1,传入的第二个参数会传给placeholders::_2,因此可以在绑定时通过控制placeholders::_n的位置,来控制第n个参数的传递位置。

2024-02-07 13:03:21 872

原创 C++进阶--C++11线程库

如果共享数据都是只读的,那么没问题,因为只读操作不会影响到数据,更不会涉及对数据的修改,所以所有线程都会获得同样的数据。调用thread的成员函数get_id可以获取线程的id,但该方法必须通过线程对象来调用get_id函数,如果要在线程对象关联的线程函数中获取线程id,可以调用this_thread命名空间下的get_id函数。线程函数的参数是以值拷贝方式拷贝到线程空间中的,就算线程函数的参数为引用类型,在线程函数中修改后也不会影响到外部实参,因为其实际引用的是线程栈中的拷贝,而不是外部实参。

2024-02-05 00:01:10 1068

原创 C++进阶--C++11 lambda表达式

因此每个lambda表达式的类型都是不同的,这也就是lambda表达式之间不能互相赋值的原因,我们通过typeid(变量名).name()的方式获取lambda表达式的类型。[=]**的方式捕获变量时,编译器也不一定会把父作用域中所有的变量捕获进来,编译器可能只会对lambda表达式中用到的变量进行捕获,没有必要把用不到的变量也捕获进来。但是由于这里是传值捕捉,lambda函数中对a和b的修改不会影响外面的a、b变量,与函数的传值传参是一个道理,因此这种方法无法完成两个数的交换。

2024-02-02 23:55:02 1034

原创 C++进阶--C++11新的类功能和可变参数模板

/ Args是一个模板参数包,args是一个函数形参参数包// 声明一个参数包Args...args,这个参数包中可以包含0到任意个模板参数。{}说明模板参数Args前面有省略号,代表它是一个可变模板参数,我们把带省略号的参数称为参数包,参数包里面可以包含0到N(N≥0)个模板参数,而args则是一个函数形参参数包。模板参数包Args和函数形参参数包args的名字可以任意指定,并不是说必须叫做Args和args。

2024-01-30 22:18:03 747

原创 C++进阶--C++11右值引用和移动语义

右值引用和移动语义一、基本概念1.1 左值的概念1.2 右值的概念1.3 左值引用的概念1.4 右值引用的概念二、右值引用使用场景和意义2.1 左值引用的使用场景2.2 左值引用的短板2.3 右值引用和移动语义2.3.1 移动构造2.3.2 移动赋值2.3.3 STL容器2.4 右值引用引用左值2.5 右值引用的其他使用场景三、完美转发3.1 万能引用3.2 完美转发保持值的属性3.3 完美转发的使用场景一、基本概念   传统的C++语法中就有引用的语法,而C++11中新增了的右值引用语法特性,所以从现

2024-01-29 16:45:59 1099

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除