
C++
文章平均质量分 72
Small black human
这个作者很懒,什么都没留下…
展开
-
C++-模板
大家都知道,瓦特改良蒸汽机,人类开始了工业革命,解放了生产力。如果不加的话因为此时还没有实例化,编译器不知道这个地方是什么,所以会报错。如果类型不匹配,编译器会尝试进行隐式类型转换,如果无法转换成功编译器将会报错。编译器根据传入模板函数的实参,来推导类型,此时如果两个形参的类型不同,会报错。1. 重载的函数仅仅是类型不同,代码复用率比较低,只要有新类型出现时,就需要用户自己增加对应的函数。2. 代码的可维护性比较低,一个出错可能所有的重载均出错。,对于字符类型也是如此。,对于模板函数的使用,原创 2023-12-03 23:15:05 · 1649 阅读 · 0 评论 -
C++-如何避免内存泄漏
内存泄漏并不是指内存在物理上的消失,而是应用程序分配某段内存后,因为设计错误,失去了对该段内存的控制,因而造成了内存的浪费。1. 工程前期良好的设计规范,养成良好的编码规范,申请的内存空间记着匹配的去释放。指程序使用系统分配的资源,比方套接字、文件描述符、管道等没有使用对应的函数释放掉,导致系统资源的浪费,严重可导致系统效能减少,系统执行不稳定。内存泄漏的危害:长期运行的程序出现内存泄漏,影响很大,如操作系统、后台服务等等,出现内存泄漏会导致响应越来越慢,最终卡死。这套库自带内存泄漏检测的功能选项。原创 2023-12-03 19:34:10 · 535 阅读 · 0 评论 -
C++-内存管理
int _month;int _day;//此时如果没有默认构造函数会报错free(p1);delete p2;return 0;对于new为自定义类型申请空间,首先回去调用operator new(其实在operator new中封装了malloc),然后在去调用该类构造函数对申请到的空间进行初始化。原创 2023-12-03 18:18:08 · 1008 阅读 · 0 评论 -
C++-C++知识点的梳理(到C++11持续更新)
原创 2023-12-03 17:17:09 · 394 阅读 · 0 评论 -
C++-类和对象
/ 类体:由成员函数和成员变量组成// 一定要注意后面的分class为定义类的关键字,ClassName为类的名字,{}中为类的主体,注意类定义结束时后面分号不能省略。类体中内容称为类中的变量称为类的属性或成员变量;类中的函数称为类的方法或者成员函数。2.类的成员方法的两种定义方式:a. 声明和定义全部放在类体中,需注意:成员函数如果在类中定义,编译器可能会将其当成内联函数处理。b. 类声明放在.h文件中,成员函数定义放在.cpp成员函数名前需要加类名。原创 2023-12-03 17:09:23 · 1639 阅读 · 0 评论 -
C++-内联函数
以inline修饰的函数叫做内联函数,编译时C++编译器会在调用内联函数的地方展开,没有函数调用建立栈帧的开销,内联函数提升程序运行的效率。2.内联函数的定义如果在上述函数前增加inline关键字将其改成内联函数,在编译期间编译器会用函数体替换函数的调用。查看方式:1. 在release模式下,查看编译器生成的汇编代码中是否存在call Add。2. 在debug模式下,需要对编译器进行设置,否则不会展开因为debug模式下,编译器默认不会对代码进行优化,以下给出vs2013。原创 2023-12-03 14:15:56 · 1033 阅读 · 0 评论 -
C++-内存的结构图
原创 2023-11-24 20:12:47 · 476 阅读 · 0 评论 -
C++-list容器常用接口的模拟实现
这里很明显会发生迭代器失效的问题,因为原结点已经被删除了,但是外部迭代器中还记录这原结点的地址,所以通过返回值解决。我们在通过迭代器遍历链表元素之前,头删一下,就会发生迭代器失效的问题,这里定义迭代器的类型是为了通过对内的封装,而实现对外处理数据提供统一的方法。在当前迭代器位置之前插入一个新的结点。2.list类模板的定义,并且实现简单的尾插功能。二.使用迭代器遍历链表中的元素。一.list对象的实例化。1.链表结点结构的定义。删除给定的迭代器的结点。五.拷贝构造和赋值重载。1.迭代器类型的定义。原创 2023-11-16 11:16:39 · 68 阅读 · 0 评论 -
C++-Vector容器常用接口的模拟实现
这里value_type()是一个匿名对象,匿名对象具有常性,所以要使用const引用,且要保证具有默认构造函数,那内置内信哪里来的默认构造函数,这里注意C++在有了模板后对内置类型进行了升级,内置类型也有了默认构造函数,erase这里虽然不会产生上述insert的问题,但是因为不同环境的检查迭代器失效的方式不同,所以在erase后也会产生迭代器失效的问题。insert方法中内部产生的迭代器失效问题:因为空间不足要扩容,而保存迭代器的变量中还保存原空间的地址,这样就造成了迭代器的失效。原创 2023-11-10 20:03:24 · 79 阅读 · 0 评论 -
C++-STL-String容器的基本功能模拟实现
reserve会改变string类对象的连续存储空间,大于capacity会增加容量,小于等于一般是不进行操作或者不进行缩容,因为这个缩容的过程无非也是从系统中重新申请一段空间然后拷贝原空间的数据,然后释放原空间,在将新空间的地址给string对象保存这个过程非常的有损效率,但是在vs2019中如果在进行缩容操作前先进行clear操作后是会缩容的,不同的编译器有不同的操作。string对象的输出和不同的字符串的不同是,string对象是输出到等于size,而普通的字符串是直接输出遇到\0字符结束。原创 2023-11-10 10:03:08 · 92 阅读 · 1 评论 -
C++-指针空值nullptr(C++11)
将其看成是一个整形常量,如果要将其按照指针方式来使用,必须对其进行强转。既可以是一个整形数字,也可以是无类型的指针。0,因此与程序的初衷相悖。常量,但是编译器默认情况下。不论采取何种定义,在。实际是一个宏,在传统的。原创 2023-10-13 19:53:56 · 174 阅读 · 0 评论 -
C++-auto关键字
是一个类型,但是该类型太长了,特别容易写错。可以通过typedef。在实际中最常见的优势用法就是跟以后会讲到的。但是typedef在使用时容易出现错误。人去使用它,大家可思考下为什么?,但遗憾的是一直没有。作为类型指示符的用法。中,标准委员会赋予了。原创 2023-10-13 19:49:35 · 67 阅读 · 0 评论 -
C++-函数的重载
C++中允许同一个作用域中声明几个功能类似的同名函数,这些同名函数的形参列表(参数个数,参数类型,参数顺序)不同。因为两种语言对函数名的修饰规则不同,C语言是直接使用函数名,C++是使用组合名(不同的编译器的修饰规则不同)。无参函数和全缺省函数构成重载,但是当调用函数时,没有传参数就会出现问题,此时系统不知道该调用那个函数。两个函数的返回值类型不同不可以构成函数的重载(在调用时不知道改调用那个)。为什么C语言不支持函数的重载,C++支持函数的重载?原创 2023-10-11 19:38:57 · 65 阅读 · 0 评论 -
C++-缺省参数(默认参数)
Func函数的形参int a = 1 这就是给形参一个缺省值,当没有实参传入的时候,函数会使用这个默认值 ,如果传参了那么就使用传入的。函数的声明和定义不可以同时缺省,此时会发生默认参数重定义的情况,一般都是在函数的声明处给出缺省值。第一个是全缺省,第二个是部分缺省。部分缺省从右向左缺省。原创 2023-10-11 19:28:28 · 206 阅读 · 0 评论 -
C++-命名空间
编译器提示我们这里的rand 变量被重定义了,可是在我们的代码中只有一个rand变量的显示定义,哪里来的重定义啊,这时因为第一段代码可以完美运行,那么问题一定出在第二段代码新引入的stdlib头文件中,其实在这个头文件中,存在一个rand变量是已经在库中定义好的。那么这样就暴露了一个C语言中非常令人头疼的问题,我写的每一行代码都满足C语言的标准规定,但是却存在命名冲突的问题,这个例子中的问题很好改正,因为我们改变不了库中定义好的,那么我们只需要将我们定义好的rand改了,问题解决出院!原创 2023-07-24 17:57:41 · 75 阅读 · 0 评论 -
C++-引用
1.对于这个用const限定符将变量a变为只读变量也就是常变量,对于它只有读取权限,而没有更改权限,而我们对于它的引用的数据类型去设置为了非const类型也就是在设置变量的引用时我们讲变量的权限放大了,这是不可以的,所以我们得出引用的一个结论。因为编译器不会为引用变量开辟空间,它和它引用的变量公用一块存储空间,所以在程序执行到函数体中,两个变量和主函数中的变量共用的是用一块空间,所以会得到我们想要的结果。引用概念上定义一个变量的别名,指针存储一个变量地址。实际是有空间的,因为。原创 2023-04-19 09:02:19 · 79 阅读 · 0 评论