C++
文章平均质量分 81
C++的一些基础语法及使用
吐泡泡_
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
C++17(新特性)
C++为了区分同名变量通过域作用限定符来访问不同的对象,也就是对象被封到命名空间李了,如果命名空间嵌套的太深了,太冗余了,C++ 17 给了一套新的定义方式。// C++ 17 之前{}// C++ 17int a = 10;原创 2025-10-31 18:45:35 · 846 阅读 · 0 评论 -
C++11新特性补充
1. 先来谈谈 volatile:防止编译器对代码进行优化(代码编译后生成指令,编译器可能因为效率的原因对指令进行重新排序,也就是调换位置),并保证他修饰的对象在内存中是可见的,因为 CPU 高速缓存(L1 L2 L3)会通过预加载机制读取一定范围的物理地址,如缓存数据和指令,如果某个对象用 const 修饰,编译器则会认为这个对象不会被改,后续访问就去缓存直接读取,volatile 则就保证了禁止去缓存,转而去内存读取数据。原创 2025-10-09 22:08:41 · 732 阅读 · 0 评论 -
仿TCmalloc内存分配器
什么是内存池前面几章讲过,这里就不在多说了。原创 2025-08-03 23:16:35 · 736 阅读 · 0 评论 -
C++(STL源码刨析/stack/queue/priority_queue)
【代码】C++(STL源码刨析/stack/queue/priority_queue)原创 2025-07-15 23:29:22 · 273 阅读 · 0 评论 -
C++(STL源码刨析/deque)
和前面 vector,list的接口不同,他是由一个数组,每个下标储存的是类型指针,在该指针上开辟空间,该指针的空间是连续的,但下标之间不是连续的,可能是连续的,这里不考虑,看起来像是vector 和 list 的结合,因为这样的结构,只需要从中间开始开辟空间,并向2边扩散,这样头尾操作都是O(1),完美的解决了 vector 和 list 的缺点,头操作,增加只需要往左边的缓冲区放入资源,删除则删除即可,不需要挪数据,每个下标之间的缓冲区无关系,尾操作也是一样的。一 deque的结构。原创 2025-07-15 00:26:33 · 313 阅读 · 0 评论 -
C++(STL源码刨析/list)
由于 链表 不是连续的内存块,所以对每一个申请到的内存块要进行统一组织,也就是封装成一个类,添加前后指针来关联申请到的内存块,在由 List 统一管理起来。由于 List 不像vector那样有一段连续的空间,所以不能直接用裸指针作为 List 的迭代器,但可以为这个指针封装一层,让他模拟指针的行为即可。list的无参构造表示没有节点,但要有个哨兵节点,因为list是双向带头循环链表,为了处理边界情况,所以有一个领头羊。那么怎么访问/遍历/修改 List 中的节点,一个个的访问吗?2. List本身字段。原创 2025-07-11 23:01:26 · 503 阅读 · 0 评论 -
C++(STL源码刨析/vector)
对象类型:对象指针:对象迭代器:对象引用:对象的个数: 用来计算对象的个数可以看出来指针和迭代器是一样的,因为vector是线性的,直接用裸指针就能模拟迭代器的行为,这里不需要过多考虑。原创 2025-07-08 22:58:00 · 842 阅读 · 0 评论 -
C++(STL源码刨析/空间配置器)
空间配置器:字面意思就是管理空间,也就是内存,但这个空间不仅仅指的是内存,比如磁盘等可以进行存储介质的硬件都可以有空间。都知道C++申请内存的方式是new,但STL容器走的都是空间配置器,为什么不走new?1. new把申请对象和对象的构造强绑定在一起。2. new申请内存必须指定类型。3. new如果在构造的时候抛异常,对象还没初始化完成,需要手动进行释放操作。4. new只能申请的是堆/共享区的内存,比如 gilic ptmalloc 管理小块内存块调用brk,大块内存块调用mmap。原创 2025-07-07 20:18:22 · 720 阅读 · 0 评论 -
C++(STL源码刨析/std::sort)
_introsort_loop():首先判断区间元素个数是否小于16,是就结束执行__introsort_loop()下一个函数__final_insertion_sort()插入排序,否则,先判断深度是否为0,是就转堆排,否则,减减深度,然后__unguarded_partition_pivot(),进行三数取中选取key,并划分左右区间,然后__introsort_loop(),递归右区间,然后让右迭代器=key,让他作为左区间的右开区间,即左区间最后一个元素+1的位置,然后执行下一次循环。原创 2025-07-03 22:36:50 · 988 阅读 · 0 评论 -
C++(new/delete)
1. new调用函数申请空间。2.在申请的空间上执行构造函数,完成对象的构造。1.在空间上执行析构函数,完成对象中资源的清理工作2.调用函数释放对象的空间。原创 2024-12-05 22:13:45 · 1062 阅读 · 0 评论 -
C++(右值引用和移动语义,lambda)
析构函数 、拷贝构造、拷贝赋值当中的任意一个,也就是3个都不能写,编译器才会默认生成,对内置类型值拷贝,自定义类型有移动构造和移动赋值 就调 移动构造和移动赋值,没有就调用拷贝构造和赋值重载。先来看看左值引用的常见场景:引用做返回值和传参效率高,无拷贝,但引用返回局部对象,局部对象销毁就有问题,但是传值返回又会拷贝效率低,右值引用则是解决这方面的问题。2. 一但接收参数如果是右值,属性则会退化成左值(为了后续的资源交换),而后续在调用的时候就当作从左值调用了。左值引用就是给左值的引用,给左值取别名。原创 2024-12-04 21:36:25 · 856 阅读 · 0 评论 -
C++(4个类型转换)
2. 强制类型转换:能隐式类型转换就能强制类型转换,隐式类型之间的转换类型强相关,强制类型转换之间类型关联没有那么大,如:整形和指针,指针与指针。但打印出来的结果不对劲,因为被const修饰了,编译器默认他不会修改,直接放到寄存器里,下次取数据直接拿寄存器里面的,不会到内存里拿。具有相近的类型才能进行互相转换,如:int,char,double都表示数值。2. 支持内置类型转自定义类型,如:单/多参数的构造函数支持隐式类型转换。3.缺点:转换的可视性比较差,所有的转换形式都是一样的,不好排查错误。原创 2024-12-02 23:55:12 · 583 阅读 · 0 评论 -
设计模式(单例模式)
如果类与类之间有相互依赖关系,全局对象创建顺序可能是乱的,那么就会导致A需要用B类,A类先创建,而B类未创建。如果程序里出现大量的懒汉模式的单例,程序运行起来要预先创建大量的资源,导致程序启动慢。缺点:在C++11之前,多线程环境下有线程安全问题,要加锁保护。借助全局对象在程序运行之前创建初始化,每次访问都是同一个对象。为了代码可重用性、让代码更容易被他人理解、保证代码可靠性。原创 2024-12-02 17:57:57 · 781 阅读 · 0 评论 -
C++(智能指针)
2.1.1 什么是内存泄漏:内存泄漏指因为疏忽或错误造成程序未能释放已经不再使用的内存的情况。内存泄漏并不是指内存在物理上的消失,而是应用程序分配某段内存后,因为设计错误,失去了对该段内存的控制,因而造成了内存的浪费。2.1.2内存泄漏的危害:长期运行的程序出现内存泄漏,影响很大,如操作系统、后台服务等等,出现内存泄漏会导致响应越来越慢,最终卡死。原创 2024-12-01 23:19:50 · 778 阅读 · 0 评论 -
C++(多态)
2.1.1.必须通过基类的指针或者引用调用虚函数。被调用的函数必须是虚函数,且派生类必须对基类的虚函数进行重写。p2,p3是指针或者引用指向了S1,所以调用Student里的fun,s4则是s1拷贝构造,没有指向所以调用Person里的fun。2.2.1 虚函数:即被virtual修饰的类成员函数称为虚函数。原创 2024-11-29 20:14:39 · 898 阅读 · 0 评论 -
C++(继承)
机制是面向对象程序设计。原创 2024-11-27 20:18:05 · 998 阅读 · 0 评论 -
C++(类与对象中)
通过前面构造函数的学习,我们知道一个对象是怎么来的,那一个对象又是怎么没呢的?析构函数:与构造函数功能相反,析构函数不是完成对对象本身的销毁,局部对象销毁工作是由 编译器完成的。这两个运算符一般不需要重载,使用编译器生成的默认取地址的重载即可,只有特殊情况,才需。无参的构造函数和全缺省的构造函数都称为默认构造函数,并且默认构造函数只能有一个。是特殊的成员函数,需要注意的是,构造函数虽然名称叫构造,但是构造函数的主要任。默认成员函数:用户没有显式实现,编译器会生成的成员函数称为默认成员函数。原创 2024-02-03 19:41:35 · 992 阅读 · 1 评论 -
C++(入门特性)
1.1定义命名空间,需要使用到。原创 2024-02-08 16:03:21 · 947 阅读 · 0 评论 -
C++(类与对象上)
定义类的。原创 2024-01-30 22:09:10 · 853 阅读 · 1 评论 -
C++模板初阶
重载的函数仅仅是类型不同,代码复用率比较低,只要有新类型出现时,就需要用户自己增加对应的函数。那有没有一个模具,根据模具自动推成代码呢?代码的可维护性比较低,一个出错可能所有的重载均出错。实现一个通用的Swap函数,可以用函数重载。类模板实例化与函数模板实例化不同,,对于字符类型也是如此。,对于模板函数的使用,原创 2024-02-07 22:37:12 · 428 阅读 · 1 评论 -
C++(类和对象下)
定义时不添加static关键字,类中只是声明3.类静态成员即可用。原创 2024-02-17 23:33:04 · 923 阅读 · 1 评论
分享