![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c++
文章平均质量分 66
你好,此用户已存在
苍山负雪,明烛天南
展开
-
shell脚本实现长短项参数设置
【代码】shell脚本实现长短项参数设置。原创 2024-07-22 19:35:58 · 66 阅读 · 0 评论 -
c++11信号量简单实现
【代码】c++11信号量简单实现。原创 2024-07-21 22:43:58 · 105 阅读 · 0 评论 -
c++11实现将任意类型数据与Any类型之间的相互转换
这样就实现了将任意数据转换为Any类型。原创 2024-07-21 22:11:35 · 133 阅读 · 0 评论 -
基于c++11的简易线程池实现(可支持任意类型和任意个数参数的任务)
【代码】基于c++11的简易线程池实现(可支持任意类型和任意个数参数的任务)原创 2024-07-15 00:01:29 · 326 阅读 · 0 评论 -
几种序列化和反序列化工具的对比
XML JSON protobuf 数据结构 结构一般比较复杂 结构简单 结构比较复杂 传输效率 慢 一般 快 数据存储方式 文本 文本 二进制 数据存储大小 大 一般 小 跨语言支持 非常多 多 一般 开发成本 繁琐 简单 一般 学习成本 一般 低 一般原创 2024-04-27 18:00:44 · 124 阅读 · 0 评论 -
protobuf的优缺点
相比于json的灵活格式,protobuf的消息类型需要在编译时静态定义,不支持动态添加和删除字段。,但如果是json这种直接以文本文件进行传输,跨平台之后就可能用不了,因此。:json可以任何语言都支持,但是protobuf需要专门的解析库。高效性:protobuf使用二进制进行数据编码,,如c++、java、python等,,可以在编译时捕获类型错误。原创 2024-04-25 19:39:11 · 381 阅读 · 1 评论 -
c++完美转发是如何实现的
关于引用,我们知道有如下分类如下所示但是,但是,,如下所示,t3左值引用了b,我们想通过修改t3的值来同时改变b的值,但是它报错了那么,这时候万能引用就出现了,先给出定义,万能引用就是下边这个样子,其他T是待被推导的类型,也就是说,万能引用是建立在模板上的概念T &&我们看下边这段代码我们直接查看代码的运行结果可以看到,在test()函数里,这就是万能引用 ,而如果我们想通过fun函数内形参parm的改变来同步外部实参的改变,也是可以实现的,如下所示另外,需要说明的是。原创 2024-04-25 19:33:47 · 1264 阅读 · 0 评论 -
为什么指针类型的形参可以直接修改实参
,并且也无法得到我们想要的结果,但是有时候我们确实在外部需要这个指针的返回值,怎么办呢?很明显,由于形参存储的地址的副本,因此形参如果地址发生了变换,那么对实参将不会有影响。那么问题来了,如果修改的是形参指针值(也就是形参指针变量里存储的地址)呢?为什么要强调这个副本,接下来会有实验进行说明。我们知道,为了避免程序隐藏问题的存在,一般情况下,我们。这是不安全的(原因涉及到函数堆栈的调用过程,具体可参考。鉴于指针的特性,我们第一个想到的就是。仔细观察以下代码的区别,其中。为什么要强调这一点?原创 2024-04-25 10:58:57 · 436 阅读 · 0 评论 -
进程的虚拟地址空间内存布局
如图所示,即为进程的虚拟地址空间划分情况,各段说明如下:原创 2024-04-14 20:47:04 · 296 阅读 · 0 评论 -
从汇编指令看函数调用堆栈的详细过程(详细图解)
我们以下述代码为例来说明函数调用堆栈的详细过程接下来,我们。原创 2024-04-14 14:36:04 · 1399 阅读 · 1 评论 -
类构造函数的列表初始化与构造函数体初始化的区别
使用构造函数初始化列表可以直接调用成员变量的特定构造函数,而不必先调用默认构造函数然后再进行赋值操作。这样可以避免了两次构造的开销,提高了初始化的效率。原创 2024-04-13 20:29:19 · 522 阅读 · 0 评论 -
mutable关键字的作用(c++)
常成员变量通常用于声明对象的状态中不希望被修改的部分。常成员函数用于表明该函数不会修改对象的状态,以便于在常对象上调用。常对象是在声明时使用 const 关键字修饰的对象,它的状态和行为受到限制,只能调用常成员函数,并且不能修改成员变量。原创 2024-04-13 12:44:00 · 964 阅读 · 0 评论 -
c++ 优先级队列std::priority_queue
转载。转载 2024-04-08 15:29:02 · 47 阅读 · 0 评论 -
vecor中push_back()与emplace_back()的区别
向容器尾部添加一个元素,首先调用构造函数构造出这个对象,再调用拷贝构造函数或者移动构造函数再向vector中传入该对象:在容器尾部添加一个元素,直接调用构造函数原地构造,不需要触发拷贝构造和移动构造。因此比push_back()更加高效。原创 2023-11-06 15:19:47 · 52 阅读 · 0 评论 -
c++文件操作
fopen是C语言标准库中用于。原创 2024-03-07 16:12:53 · 331 阅读 · 0 评论 -
c++动态获取工作路径
如何在任意目录下运行bin目录下的可执行程序,都能让代码找到log目录,从而正确的将日志文件写入到log目录内呢?该函数可以处理所有类型的路径,包括相对路径、符号链接等,最终返回一个规范化的绝对路径。这样我就可以首先通过可执行程序的文件路径找到项目根目录,再找到log文件夹了。如上所示,我的项目根目录里有一个log文件夹和一个bin文件夹,我的需求是。但是写完之后我发现了一个愚蠢的问题,为什么我不直接把路径拼接上去呢?但是在写代码的时候遇到了以下问题。最近在写项目时遇到一个问题。原创 2024-03-03 22:19:17 · 318 阅读 · 0 评论 -
使用c++实现一个简单的线程安全队列
【代码】使用c++实现一个简单的线程安全队列。原创 2024-03-03 17:04:24 · 200 阅读 · 0 评论 -
protobuf简单使用(二)
上一节中,我们介绍了protobuf,简单来说,它是,其作用类似于json,但是比json的使用效率要高。除此以外,我们介绍了protobuf的简单使用,也就是如何可以null但是在日常开发中,除了我们在上节中会使用到的普通数据之外,我们还会用到列表(数组)类型和映射表类型的数据,本节我们将介绍如何使用protobuf对列表类型的数据进行序列化和反序列化。原创 2024-02-25 20:12:55 · 579 阅读 · 0 评论 -
protobuf的简单使用
test.proto//配置文件//声明protobuf版本//声明了代码所在的命名空间//定义登录请求消息类型//表示loginRequest消息的第一个字段//表示loginRequest消息的第二个字段对于消息类型中数据类型为string的字段,为了提高效率,可以将string类型替换为bytes类型,并且并不影响后期在代码中的使用,如下所示//声明protobuf版本//声明了代码所在的命名空间//定义登录请求消息类型//表示loginRequest消息的第一个字段。原创 2024-02-25 17:37:52 · 261 阅读 · 0 评论 -
多线程访问共享对象的线程安全问题
也就是说,如果类A的资源仍旧存在,那么pw.lock()就会返回一个强指针从而访问资源,否则就说明类A的资源已经不存在了,就不能再访问它,这样就解决了多线程访问共享资源的线程安全问题。目前来看,子线程t1访问主线程中类A的方法没什么问题。但是我们稍微修改一下代码,让子线程休眠2s,如下所示。如图所示,由于子线程休眠了2s,因此主线程释放掉了指针p后,子线程才开始执行。为了解决这种问题,我们引入智能指针的处理方式。在以上处理方式中,由于。原创 2024-02-24 10:29:55 · 266 阅读 · 0 评论 -
shared_ptr的交叉引用问题
通过上图我们可以看到,指针p1和p2的引用计数都是2,然而当test函数执行结束后,也就是。因此,要解决这种循环引用的问题的办法就是,让_pa和_pb指针不对资源进行计数。由于类B中的数据成员是类A的指针,常理来说,它可以调用类A的这个成员函数,也就是如下。接下来,我们在测试函数里写一段代码,来说明强智能指针的循环引用问题。可以看到,修改后的代码正确调用了析构函数,从而避免了内存泄漏。这就是weak_ptr指针的作用,将一个 weak_ptr。如上所示,我们定义了两个类,其中。因此,一般情况下,我们在。原创 2024-02-23 20:21:55 · 429 阅读 · 0 评论 -
c++智能指针(unique_ptr、shared_ptr)的简易实现
具体而言,就是这样,如下所示,当我们创建这个智能指针对象时,这个对象资源就被放在了栈上,当。而。原创 2024-02-23 17:27:46 · 965 阅读 · 0 评论 -
cin、cin.get()、cin.getline()与getline的区别
【代码】cin、cin.get()、cin.getline()与getline的区别。原创 2024-02-21 17:21:38 · 243 阅读 · 0 评论 -
函数模板与模板的特例化
模板的意义:对类型进行参数化。原创 2024-02-19 14:31:28 · 329 阅读 · 0 评论 -
基于CAS操作的atomic原子类型
在上一节的卖票程序中,我们讲解了如何在多线程中保证临界资源的正确访问——使用互斥锁,即。,在高并发的情况下可能会带来一定的性能影响。是比较重的,临界区代码做的事情比较多,它。原创 2024-02-17 14:28:13 · 341 阅读 · 0 评论 -
gdb调试执行(启动调试、添加参数、附加进程、调试core文件)
最近写项目时需要在linux下进行调试,因此想学习一下GDB,在博客上看到一篇很好的文章,在此将原文搬过来以做记录。转载 2024-02-04 12:37:36 · 252 阅读 · 0 评论 -
什么是多态?
多态可分为静态多态和动态多态。原创 2024-02-04 00:22:44 · 79 阅读 · 0 评论 -
c++虚函数的调用一定是动态绑定吗
在这段测试代码里,尽管show都是虚函数,但是调用它的对象分别为其各自本身,这种调用也是静态绑定,而非动态绑定。在这段代码里,我们写了一个基类和一个派生类,并为其定义了虚函数,测试代码如下。原创 2024-02-04 00:13:54 · 182 阅读 · 0 评论 -
c++重载、隐藏和覆盖
如上,。调用时,,测试如下。原创 2024-02-03 23:50:50 · 690 阅读 · 0 评论 -
c++虚函数及其内存布局、静态绑定与动态绑定与多态
首先说明,所谓接下来,我们直接看一段代码来说明问题上述代码中,定义了一个Base类和一个Derive类,并且Derive类继承了Base类,其中Base类中有一组互为重载关系的成员函数showDerive类中有一个与Base类中同名的成员函数,因此,Derive::show()与Base::show()、Base::show(int)构成了隐藏关系。原创 2024-02-03 23:46:12 · 1034 阅读 · 0 评论 -
GDB调试常用命令
命令功能file装入想要调试的可执行文件kill终止正在进行的调试程序list列出产生执行文件的源代码的一部分next执行一行源代码但不进入函数内部step执行一行源代码并可以进入函数内部run执行当前被调试的程序c继续运行程序quit终止gdbwatch使你能监视一个变量的值而不管它何时被改变backtrack栈跟踪,查看代码被谁调用print查看变量的值make不用退出gdb,就可以重新生成可执行文件shell。原创 2024-01-22 23:58:38 · 359 阅读 · 0 评论 -
c++ mysql数据库编程(linux系统)
ubuntu安装mysql(图文详解)-CSDN博客。原创 2024-01-20 22:11:35 · 625 阅读 · 0 评论 -
c++命名空间代码测试
【代码】c++命名空间代码测试。原创 2024-01-18 18:24:32 · 344 阅读 · 0 评论 -
使用muduo库编写网络server端
运行server端之后,再打开一个终端,运行telnet命令作为客户端进行测试。muduo库源码编译安装和环境搭建。打开一个linux终端写下编译命令。原创 2024-01-17 18:04:21 · 789 阅读 · 0 评论 -
使用bind与function模板创建线程池
【代码】模拟muduo使用bind与function模板创建线程池。原创 2024-01-17 00:26:31 · 440 阅读 · 0 评论 -
c++可调用对象、function类模板与std::bind
因为有了占位符(placeholder)这种概念,所以std::bind的使用就变得非常灵活。可以直接绑定函数的所有参数,也可以仅绑定部分参数。绑定部分参数时,就需要通过std::placeholders来决定bind所在位置的参数将会属于调用发生时的第几个参数。std::bind的思想实际上是一种延迟计算的思想,将可调用对象保存起来,然后在需要的时候再调用。std::function一般要绑定一个可调用对象,类成员函数不能被绑定。而std::bind更加强大,成员函数、成员变量等都能绑定。原创 2024-01-16 23:46:31 · 1217 阅读 · 0 评论 -
详解c++移动构造函数和移动赋值运算符在代码性能中的作用
最后我们再定义一个简单的函数。原创 2024-01-10 12:54:58 · 1172 阅读 · 0 评论 -
vscode文件配置
【代码】vscode文件配置。原创 2024-01-10 10:49:10 · 788 阅读 · 0 评论 -
c++临时对象的探讨及相关性能提升
再次观察一个。原创 2024-01-10 00:31:48 · 957 阅读 · 0 评论 -
vsCode输出控制台中文乱码解决
在tasks.json里的args中添加。原创 2024-01-09 21:45:53 · 750 阅读 · 0 评论