![](https://img-blog.csdnimg.cn/3731a8fb8c184b9c8db8bfa5d7eb4dbe.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
C++Plus
文章平均质量分 88
C++查缺补漏、遗忘的知识点、容易错过的知识点、学习过程中遗漏没有学懂的知识点
hello world 999
日拱一卒无有尽,功不唐捐终到海,十年磨一剑,再见顶峰相见。
展开
-
【CPP11新特征】01:概述
要解决的问题是:可能调用了库函数、或者一个目标文件中调用了另外一个文件中的库函数,需要通过链接器建立对应的关系,使程序能够正常的执行。编译的过程将预处理的文件进行一系列的词法分析、语法分析、语义分析及优化成相应的汇编代码。答:strlen的时间复杂度为O(n),而string.length的时间复杂度为O(1),string类中存储着length的大小,strlen为遍历方式。答:理解为调用的是类对象str1的函数,而str2作为参数传入函数中,str1是一个this指针(this对象是str1)原创 2023-04-09 12:28:39 · 403 阅读 · 0 评论 -
【CPP11新特征】02:可调用对象与lambda表达式
声明符也可以包含类型修饰,从而也能由基本数据类型构造出复合类型,可以使用 using别名声明来定义类型的别名。在定义基础类型时,通过 using 和 typedef 的语法格式发现二者的使用没有太大区别,其不同在于定义函数指针//使用typedef定义函数指针 其中func为函数指针 int为其返回类型 using func = int(*)(int , double);//使用using定义函数指针 其中func为函数指针 int为其返回类型。原创 2023-04-26 17:21:06 · 500 阅读 · 2 评论 -
多态/虚函数/虚函数表
如果每个父类都有虚函数,那么每个父类都会有一个虚函数表,子类对象会包含每个父类的虚函数表指针,因此子类对象会有多个虚函数表指针,每个指针指向相应的虚函数表。如果某个父类没有虚函数,那么子类对象就不会包含该父类的虚函数表指针,只会包含其他父类的虚函数表指针和成员变量。多态性:多态必须存在虚函数,没有虚函数绝不可能存在多态,并且只有调用虚函数时才有存在多态性的可能,当某个类中存在至少一个虚函数的时候,在编译期间编译器就会为类A生成一个虚函数表。虚函数表指针(virtual table ptr),原创 2023-08-27 22:46:51 · 215 阅读 · 0 评论 -
事件回调机制实现
使用C++编写回调函数时,一种常见的场景是使用函数指针作为回调机制。事件回调的基本概念是,在某个特定事件发生时,系统会调用预先定义好的函数(即回调函数)来处理该事件。以下是两种常见的回调函数实现方式:回调函数有两种实现方式,函数指针回调与函数对象回调,通过函数指针或函数对象实现回调函数时,可以根据需要传递参数,并在回调函数中执行相应的逻辑。程序在事件发生时采取相应的动作,而不必等待事件的完成。回调函数通常作为参数传递给触发事件的函数。在C++中,回调函数通常通过。,从而实现灵活的回调机制。原创 2023-08-27 11:04:21 · 900 阅读 · 0 评论 -
内存对齐总结
计算机系统对基本类型数据在内存中存放的位置有限制,它们会要求这些数据的首地址的值是某个数k(通常它为4或8)的倍数,这就是所谓的内存对齐。在结构体中,编译器为结构体的每个成员按其自然边界(alignment)分配空间,各个成员按照它们被声明的顺序在内存中顺序存储,第一个成员的地址和整个结构体的地址相同。看下面程序,理论上占10byte,age占4byte,weightheight各占8字节,那么将它们放到一个结构体中应该占30byte;但是实际上得到的结果是32byte,这就是内存对齐所导致的。原创 2023-04-09 19:37:07 · 608 阅读 · 0 评论 -
C:flexible array member not at end of struct
与函数参数中的数组声明不同,声明为 struct 或 union 的一部分的数组必须指定大小(有一个异常exception情况如下所述)。此规则的异常(exception)是所谓的“灵活数组成员”,它是在 struct 末尾声明的没有大小的数组。因为这被认为是另一个问题的重复,实际上我没有找到我真正需要的答案,类似问题中的答案没有描述编译器抛出我询问的错误的原因。我得到的错误是“错误:灵活的数组成员不在结构的末尾”。但是为什么灵活的数组成员需要在结构的末尾?这是编译器知道所有数据成员的偏移量的唯一方法。转载 2023-03-13 17:04:17 · 2042 阅读 · 0 评论 -
multiple definition of ‘xxx‘ first defined here错误记录
a.cpp和b.cpp先分别被编译为.o格式的目标文件,两个目标文件再被链接器链接起来,这当中a.cpp和b.cpp分别进行了一次include,相当于global.h中的代码重复出现了一次。在C++中const修饰的变量,在编译的时候如果前面有 extern 和取地址符 & 时,会为变量分配存储空间是为了兼容C语言,但是在C++中,用const修饰的变量就真的无法修改它的值,可以说是常亮。extern修饰的变量具有外部链接属性,可以实现全局变量的属性,与const结合就可以实现全局和只读变量的目的,原创 2023-04-08 17:48:16 · 7563 阅读 · 1 评论 -
NULL与nullptr的区别
在这段代码中,我们对函数func进行可重载,参数分别是void*类型和int类型,但是运行结果却与我们使用NULL的初衷是相违背的,因为我们本来是想用NULL来代替空指针,但是在将NULL输入到函数中时,它却选择了int形参这个函数版本,所以是有问题的,这就是用NULL代替空指针在C++程序中的二义性。可见,在C++中,NULL实际上是0.因为C++中不能把void*类型的指针隐式转换成其他类型的指针,所以为了结果空指针的表示问题,C++引入了0来表示空指针,这样就有了上述代码中的NULL宏定义。转载 2023-08-29 08:38:05 · 178 阅读 · 0 评论 -
一个的错误的演化
C程序中的问题的本质:在于定义了char *str但是没有为其分配内存空间,添加上一行calloc操作为其分配内存空间:char * str;int num;len ++;} //获取num的长度 int i = len - 1;num /= 10;i --;return 0;C++程序中的问题也是相同的string str;没有进行初始化,直接使用str[i]去引用string中的某个字符导致访问非法内存访问。原创 2023-04-03 00:51:19 · 269 阅读 · 0 评论