摘要: # 20.STL中list与queue之间的区别 `std::list` 和 `std::queue` 是 C++ 标准库中的两个不同容器,它们之间有以下几点区别: 1. 容器类型:`std::list` 是一个双向链表,而 `std::queue` 是一个队列,可以使用多种实现方式(如顺序容器、优 阅读全文
posted @ 2023-08-02 22:57 CodeMagicianT 阅读(1142) 评论(0) 推荐(0)
摘要: # 19.map中[]与find的区别? 1. map的下标运算符[]的作用是:将关键码作为下标去执行查找,并返回对应的值;如果不存在这个关键码,就将一个具有该关键码和值类型的默认值的项插入这个map。 2. map的find函数:用关键码执行查找,找到了返回该位置的迭代器;如果不存在这个关键码,就 阅读全文
posted @ 2023-08-02 22:48 CodeMagicianT 阅读(112) 评论(0) 推荐(0)
摘要: # 18.vector越界访问下标,map越界访问下标?vector删除元素时会不会释放空间? ## 1.vector越界访问下标 `std::vector`是C++标准库中的一种动态数组,其大小可以根据需要进行调整。当你试图访问一个不存在的元素,即访问超出其当前大小范围的索引时,将会发生越界访问。 阅读全文
posted @ 2023-08-02 22:48 CodeMagicianT 阅读(1062) 评论(0) 推荐(0)
摘要: # 17.STL中unordered_map(hash_map)和map的区别,hash_map如何解决冲突以及扩容 ## 1.区别 ### 1.1需要引入的头文件不同 map: `#include ` unordered_map: `#include ` ### 1.2内部实现机理不同 map: 阅读全文
posted @ 2023-08-02 22:47 CodeMagicianT 阅读(1064) 评论(0) 推荐(0)
摘要: # 16.map插入方式有哪几种? 1.用insert函数插入pair数据 ```C++ mapStudent.insert(pair(1, "student_one")); ``` 2.用insert函数插入value_type数据 ```C++ mapStudent.insert(map::va 阅读全文
posted @ 2023-08-02 22:46 CodeMagicianT 阅读(137) 评论(0) 推荐(0)
摘要: # 15.如何在共享内存上使用STL标准库? 1.想像一下把STL容器,例如map, vector, list等等,放入共享内存中,IPC一旦有了这些强大的通用数据结构做辅助,无疑进程间通信的能力一下子强大了很多。 我们没必要再为共享内存设计其他额外的数据结构,另外,STL的高度可扩展性将为IPC所 阅读全文
posted @ 2023-08-02 22:45 CodeMagicianT 阅读(302) 评论(0) 推荐(0)
摘要: # 14.map、set是怎么实现的,红黑树是怎么能够同时实现这两种容器? 为什么使用红黑树? 1.他们的底层都是以红黑树的结构实现,因此插入删除等操作都在O(lgn)时间内完成,因此可以完成高效的插入删除; 2.在这里我们定义了一个模版参数,如果它是key那么它就是set,如果它是map,那么它就 阅读全文
posted @ 2023-08-02 22:45 CodeMagicianT 阅读(71) 评论(0) 推荐(0)
摘要: # 13.STL迭代器如何实现 1.迭代器是一种抽象的设计理念,通过迭代器可以在不了解容器内部原理的情况下遍历容器,除此之外,STL中迭代器一个最重要的作用就是作为容器与STL算法的粘合剂。 2.迭代器的作用就是提供一个遍历容器内部所有元素的接口,因此迭代器内部必须保存一个与容器相关联的指针,然后重 阅读全文
posted @ 2023-08-02 22:44 CodeMagicianT 阅读(45) 评论(0) 推荐(0)
摘要: # 12.容器内部删除一个元素 ## 1.关联容器的删除 对于关联容器(如map, set,multimap,multiset),删除当前的iterator,仅仅会使当前的iterator失效,只要在erase时,递增当前iterator即可。这是因为map之类的容器,使用了红黑树来实现,插入、删除 阅读全文
posted @ 2023-08-02 22:44 CodeMagicianT 阅读(165) 评论(0) 推荐(0)
摘要: # 11.Vector如何释放空间? 由于vector的内存占用空间只增不减,比如你首先分配了10000个字节,然后erase掉后面9999个,留下一个有效元素,但是内存占用仍为10000个。所有内存空间是在vector析构时候才能被系统回收。empty()用来检测容器是否为空的,clear()可以 阅读全文
posted @ 2023-08-02 22:43 CodeMagicianT 阅读(328) 评论(0) 推荐(0)
摘要: # 10.STL 中vector删除其中的元素,迭代器如何变化?为什么是两倍扩容?释放空间? size()函数返回的是已用空间大小,capacity()返回的是总空间大小,capacity()-size()则是剩余的可用空间大小。当size()和capacity()相等,说明vector目前的空间已 阅读全文
posted @ 2023-08-02 22:42 CodeMagicianT 阅读(238) 评论(0) 推荐(0)
摘要: # 9.vector与list的区别与应用?怎么找某vector或者list的倒数第二个元素 1.vector数据结构 vector和数组类似,拥有一段连续的内存空间,并且起始地址不变。因此能高效的进行随机存取,时间复杂度为o(1);但因为内存空间是连续的,所以在进行插入和删除操作时,会造成内存块的 阅读全文
posted @ 2023-08-02 22:39 CodeMagicianT 阅读(342) 评论(0) 推荐(0)
摘要: # 8.STL的两级空间配置器 ## 为什么有适配器? (1)小块内存带来的内存碎片问题 单从分配的角度来看。由于频繁分配、释放小块内存容易在堆中造成外碎片(极端情况下就是堆中空闲的内存总量满足一个请求,但是这些空闲的块都不连续,导致任何一个单独的空闲的块都无法满足这个请求)。 (2)小块内存频繁申 阅读全文
posted @ 2023-08-02 22:27 CodeMagicianT 阅读(163) 评论(0) 推荐(0)
摘要: # 7.简单说一下traits技法 traits技法利用“内嵌型别“的编程技巧与**编译器的template参数推导功能**,增强C++未能提供的关于型别认证方面的能力。常用的有iterator_traits和type_traits。 **iterator_traits** 被称为**特性萃取机** 阅读全文
posted @ 2023-08-02 22:23 CodeMagicianT 阅读(179) 评论(0) 推荐(0)
摘要: 6.STL中hashtable的实现? STL中的hashtable使用的是开链法解决hash冲突问题,如下图所示。 hashtable中的bucket所维护的list既不是list也不是slist,而是其自己定义的由hashtable_node数据结构组成的linked-list,而bucket聚 阅读全文
posted @ 2023-08-02 22:22 CodeMagicianT 阅读(91) 评论(0) 推荐(0)
摘要: # 5.说一下C++左值引用和右值引用 C++11正是通过引入右值引用来优化性能,具体来说是通过移动语义来避免无谓拷贝的问题,通过move语义来将临时生成的左值中的资源无代价的转移到另外一个对象中去,通过完美转发来解决不能按照参数实际类型来转发的问题(同时,完美转发获得的一个好处是可以实现移动语义) 阅读全文
posted @ 2023-08-02 22:20 CodeMagicianT 阅读(527) 评论(0) 推荐(0)
摘要: # 4.迭代器:++it、it++哪个好,为什么 1.前置返回一个引用,后置返回一个对象 ```C++ // ++i实现代码为: int& operator++() { *this += 1; return *this; } ``` 2.前置不会产生临时对象,后置必须产生临时对象,临时对象会导致效率 阅读全文
posted @ 2023-08-02 22:18 CodeMagicianT 阅读(103) 评论(0) 推荐(0)
摘要: # 3.使用智能指针管理内存资源,RAII是怎么回事? 什么是RAII? RAII是Resource Acquisition Is Initialization(wiki上面翻译成 “资源获取就是初始化”)的简称,是C++语言的一种管理资源、避免泄漏的惯用法。利用的就是C++构造的对象最终会被销毁的 阅读全文
posted @ 2023-08-02 22:17 CodeMagicianT 阅读(80) 评论(0) 推荐(0)
摘要: # 2.解释一下什么是trivial destructor 什么是 trivial destructor和 non-trivial destructor 如果用户不定义析构函数,而是用系统自带的,则说明,析构函数基本没有什么用(但默认会被调用)我们称之为trivial destructor。反之,如 阅读全文
posted @ 2023-08-02 22:17 CodeMagicianT 阅读(286) 评论(0) 推荐(0)
摘要: # 1.什么是STL? C++STL从广义来讲包括了三类:算法,容器和迭代器。 - 算法包括排序,复制等常用算法,以及不同容器特定的算法。 - 容器就是数据的存放形式,包括顺序容器和关联式容器,顺序式容器就是list,vector等,关联式容器就是set,map等。 - 在C++中,迭代器是一种用于 阅读全文
posted @ 2023-08-02 22:16 CodeMagicianT 阅读(268) 评论(0) 推荐(0)
摘要: # 10.智能指针出现循环引用怎么解决? 弱指针用于专门解决shared_ptr循环引用的问题,weak_ptr不会修改引用计数,即其存在与否并不影响对象的引用计数器。循环引用就是:两个对象互相使用一个shared_ptr成员变量指向对方。弱引用并不对对象的内存进行管理,在功能上类似于普通指针,然而 阅读全文
posted @ 2023-08-02 22:16 CodeMagicianT 阅读(83) 评论(0) 推荐(0)
摘要: # 9.手写实现智能指针类需要实现哪些函数? ==1.智能指针是一个数据类型,一般用模板实现,模拟指针行为的同时还提供自动垃圾回收机制。它会自动记录SmartPointer对象的引用计数,一旦T类型对象的引用计数为0,就释放该对象。== 除了指针对象外,我们还需要一个引用计数的指针设定对象的值,并将 阅读全文
posted @ 2023-08-02 22:15 CodeMagicianT 阅读(268) 评论(0) 推荐(0)
摘要: # 8.智能指针的循环引用 循环引用是指使用多个智能指针share_ptr时,出现了指针之间相互指向,从而形成环的情况,有点类似于死锁的情况,这种情况下,智能指针往往不能正常调用对象的析构函数,从而造成内存泄漏。举个例子: ```C++ #include using namespace std; t 阅读全文
posted @ 2023-08-02 22:15 CodeMagicianT 阅读(231) 评论(0) 推荐(0)
摘要: # 7.说说你了解的auto_ptr作用 1.auto_ptr的出现,主要是为了解决“有异常抛出时发生内存泄漏”的问题;抛出异常,将导致指针p所指向的空间得不到释放而导致内存泄漏; 2.auto_ptr构造时取得某个对象的控制权,在析构时释放该对象。我们实际上是创建一个auto_ptr\类型的局部对 阅读全文
posted @ 2023-08-02 22:15 CodeMagicianT 阅读(51) 评论(0) 推荐(0)
摘要: # 6.智能指针的作用 1.C++11中引入了智能指针的概念,方便管理堆内存。使用普通指针,容易造成堆内存泄露(忘记释放),二次释放,程序发生异常时内存泄露等问题等,使用智能指针能更好的管理堆内存。 2.智能指针在C++11版本之后提供,包含在头文件\中,shared_ptr、unique_ptr、 阅读全文
posted @ 2023-08-02 22:14 CodeMagicianT 阅读(53) 评论(0) 推荐(0)
摘要: # 5.说一说你了解的关于lambda函数的全部知识 1.利用lambda表达式可以编写内嵌的匿名函数,用以替换独立函数或者函数对象; 2.每当你定义一个lambda表达式后,编译器会自动生成一个匿名类(这个类当然重载了()运算符),我们称为闭包类型(closure type)。那么在运行时,这个l 阅读全文
posted @ 2023-08-02 22:12 CodeMagicianT 阅读(241) 评论(0) 推荐(0)
摘要: # 4.智能指针的原理、常用的智能指针及实现 ## 1.auto_ptr 当你在读这篇文章的时候,应该都有这样一个疑问?那就是为什么要使用[智能指针](https://so.csdn.net/so/search?q=智能指针&spm=1001.2101.3001.7020)。 我们先看这样一个示例: 阅读全文
posted @ 2023-08-02 22:09 CodeMagicianT 阅读(371) 评论(0) 推荐(0)
摘要: # 3.C++中NULL和nullptr区别 ## 1.NULL是什么 在[《NULL,0,'\0',"0","\0"的区别》](http://mp.weixin.qq.com/s?__biz=MzI2OTA3NTk3Ng==&mid=2649284887&idx=1&sn=e97526b0e2cb 阅读全文
posted @ 2023-08-02 22:04 CodeMagicianT 阅读(105) 评论(0) 推荐(0)
摘要: # 2.auto、decltype和decltype(auto)的用法 ## 1.auto 编程时常常需要把表达式的值赋给变量,这就要求声明变量时清楚的知道表达式的类型。然而有些情况是声明的变量的类型我们并不知道,比如在模板编程时。为了解决这个问题,C++11引入了auto类型说明符,用它来让编译器 阅读全文
posted @ 2023-08-02 22:03 CodeMagicianT 阅读(470) 评论(0) 推荐(0)
摘要: # 1.C++ 11有哪些新特性? - long long类型 - 列表初始化 - nullptr常量(替代 NULL) - constexpr变量[[68.C++中的const - CodeMagicianT - 博客园 (cnblogs.com)](https://www.cnblogs.com 阅读全文
posted @ 2023-08-02 22:03 CodeMagicianT 阅读(55) 评论(0) 推荐(0)
摘要: # 15.类对象的大小受哪些因素影响? 1.类的非静态成员变量大小,静态成员不占据类的空间,成员函数也不占据类的空间大小; 2.内存对齐另外分配的空间大小,类内的数据也是需要进行内存对齐操作的; 3.虚函数的话,会在类对象插入vptr指针,加上指针大小; 4.当该类是某类的派生类,那么派生类继承的基 阅读全文
posted @ 2023-08-02 22:01 CodeMagicianT 阅读(120) 评论(0) 推荐(0)
摘要: # 14.this指针调用成员变量时,堆栈会发生什么变化? 当在类的非静态成员函数访问类的非静态成员时,编译器会自动将对象的地址传给作为隐含参数传递给函数,这个隐含参数就是this指针。 即使你并没有写this指针,编译器在链接时也会加上this的,对各成员的访问都是通过this的。 例如你建立了类 阅读全文
posted @ 2023-08-02 22:01 CodeMagicianT 阅读(76) 评论(0) 推荐(0)
摘要: # 13.请说一下以下几种情况下,下面几个类的大小各是多少? ```C++ class A {}; int main() { cout << sizeof(A) << endl;// 输出 1; A a; cout << sizeof(a) << endl;// 输出 1; return 0; } 阅读全文
posted @ 2023-08-02 22:00 CodeMagicianT 阅读(39) 评论(0) 推荐(0)
摘要: # 12.你知道空类的大小是多少吗? 1.C++空类的大小不为0,不同编译器设置不一样,vs设置为1 2.C++标准指出,不允许一个对象(当然包括类对象)的大小为0,不同的对象不能具有相同的地址 3.带有虚函数的C++类大小不为1,因为每一个对象会有一个vptr指向虚函数表,具体大小根据指针大小确定 阅读全文
posted @ 2023-08-02 21:59 CodeMagicianT 阅读(380) 评论(0) 推荐(1)
摘要: # 11.如果在类的析构函数中调用delete this,会发生什么? 会导致堆栈溢出。原因很简单,delete的本质是“为将被释放的内存调用一个或多个析构函数,然后,释放内存”。显然,delete this会去调用本对象的析构函数,而析构函数中又调用delete this,形成无限递归,造成堆栈溢 阅读全文
posted @ 2023-08-02 21:58 CodeMagicianT 阅读(102) 评论(0) 推荐(0)
摘要: # 10.为什么是不可预期的问题? delete this之后不是释放了类对象的内存空间了么,那么这段内存应该已经还给系统,不再属于这个进程。照这个逻辑来看,应该发生指针错误,无访问权限之类的令系统崩溃的问题才对啊?这个问题牵涉到操作系统的内存管理策略。delete this释放了类对象的内存空间, 阅读全文
posted @ 2023-08-02 21:58 CodeMagicianT 阅读(31) 评论(0) 推荐(0)
摘要: # 9.在成员函数中调用delete this会出现什么问题?对象还可以使用吗? 在类对象的内存空间中,只有数据成员和虚函数表指针,并不包含代码内容,类的成员函数单独放在代码段中。在调用成员函数时,隐含传递一个this指针,让成员函数知道当前是哪个对象在调用它。当调用delete this时,类对象 阅读全文
posted @ 2023-08-02 21:58 CodeMagicianT 阅读(69) 评论(0) 推荐(0)
摘要: # 8.内存泄漏的后果?如何监测?解决方法? ## 1.内存泄漏 ### 1.1定义 内存泄漏是指由于疏忽或错误造成了程序未能释放掉不再使用的内存的情况。内存泄漏并非指内存在物理上消失,而是应用程序分配某段内存后,由于设计错误,失去了对该段内存的控制; ### 1.2种类 #### 1.2.1C/C 阅读全文
posted @ 2023-08-02 21:57 CodeMagicianT 阅读(306) 评论(0) 推荐(0)
摘要: # 7.几个this指针的易混问题 见[6.类的*this指针有以下特点](https://www.cnblogs.com/codemagiciant/p/17601868.html) 阅读全文
posted @ 2023-08-02 21:54 CodeMagicianT 阅读(23) 评论(0) 推荐(0)
摘要: ## 6.类的\*this指针有以下特点 #### 1.每个对象都有一个隐藏的this指针,但不属于对象,是编译器添加的 #### 2.this只能在成员函数中使用。全局函数、静态函数都不能使用this。 实际上,成员函数默认第一个参数为T \*const this。 如: ``` class A 阅读全文
posted @ 2023-08-02 21:52 CodeMagicianT 阅读(86) 评论(0) 推荐(0)
摘要: # 5.C++中类的数据成员和成员函数内存分布情况 - 非静态成员的数据类型大小之和。 - 编译器加入的额外成员变量(如指向虚函数表的指针)。 - 为了边缘对齐优化加入的padding。 空类(无非静态数据成员)的对象的size为1, 当作为基类时, size为0。 C++类是由结构体发展得来的,所 阅读全文
posted @ 2023-08-02 21:49 CodeMagicianT 阅读(461) 评论(0) 推荐(0)
摘要: # 4.可以说一下你了解的C++得内存管理吗? ## 1.一个由c/C++编译的程序占用的[内存](https://so.csdn.net/so/search?q=内存&spm=1001.2101.3001.7020)分为以下几个部分: C++中的内存分区,分别是堆、栈、自由存储区、全局/静态存储区 阅读全文
posted @ 2023-08-02 21:47 CodeMagicianT 阅读(96) 评论(0) 推荐(0)
摘要: # 3.什么是内存池,如何实现 内存池(Memory Pool) 是一种**内存分配**方式。通常我们习惯直接使用new、malloc 等申请内存,这样做的缺点在于:由于所申请内存块的大小不定,当频繁使用时会造成大量的内存碎片并进而降低性能。内存池则是在真正使用内存之前,先申请分配一定数量的、大小相 阅读全文
posted @ 2023-08-02 21:46 CodeMagicianT 阅读(169) 评论(0) 推荐(0)
摘要: # 2.简要说明C++的内存分区 ## 1.一个由C/C++编译的程序占用的[内存](https://so.csdn.net/so/search?q=内存&spm=1001.2101.3001.7020)分为以下几个部分: C++中的内存分区,分别是堆、栈、自由存储区、全局/静态存储区、常量存储区和 阅读全文
posted @ 2023-08-02 21:46 CodeMagicianT 阅读(114) 评论(0) 推荐(0)
摘要: # 1.类的对象存储空间? - 非静态成员的数据类型大小之和。 - 编译器加入的额外成员变量(如指向虚函数表的指针)。 - 为了边缘对齐优化加入的padding。 空类(无非静态数据成员)的对象的size为1, 当作为基类时, size为0。 C++类是由结构体发展得来的,所以他们的成员变量(C语言 阅读全文
posted @ 2023-08-02 21:43 CodeMagicianT 阅读(120) 评论(0) 推荐(0)
摘要: # 134.为什么C++没有垃圾回收机制?这点跟Java不太一样 1. 性能:垃圾回收机制需要额外的内存和计算资源,这会引入一定的开销。C++的设计目标之一是提供高效的性能,垃圾回收机制可能会对程序的性能产生负面影响。因此,C++没有内置的垃圾回收机制,以便程序员自行管理内存等资源。 2. 控制:C 阅读全文
posted @ 2023-08-02 21:41 CodeMagicianT 阅读(205) 评论(0) 推荐(0)
摘要: # 133.为什么不能把所有的函数写成内联函数? 内联函数以代码复杂为代价,它以省去函数调用的开销来提高执行效率。所以一方面如果内联函数体内代码执行时间相比函数调用开销较大,则没有太大的意义;另一方面每一处内联函数的调用都要复制代码,消耗更多的内存空间,因此以下情况不宜使用内联函数: - 函数体内的 阅读全文
posted @ 2023-08-02 21:40 CodeMagicianT 阅读(90) 评论(0) 推荐(0)
摘要: # 132.delete和delete[]区别? - delete只会调用一次析构函数。 - delete[]会调用数组中每个元素的析构函数。 阅读全文
posted @ 2023-08-02 21:40 CodeMagicianT 阅读(35) 评论(0) 推荐(0)
摘要: # 131.介绍一下几种典型的锁 **读写锁** - 多个读者可以同时进行读 - 写者必须互斥(只允许一个写者写,也不能读者写者同时进行) - 写者优先于读者(一旦有写者,则后续读者必须等待,唤醒时优先考虑写者) **互斥锁** 一次只能一个线程拥有互斥锁,其他线程只有等待 互斥锁是在抢锁失败的情况 阅读全文
posted @ 2023-08-02 21:40 CodeMagicianT 阅读(83) 评论(0) 推荐(0)
摘要: # 130.hello.c 程序的编译过程 以下是一个 hello.c 程序: ```C++ #include int main() { printf("hello, world\n"); return 0; } ``` 在 Unix 系统上,由编译器把源文件转换为目标文件。 ``` gcc -o 阅读全文
posted @ 2023-08-02 21:39 CodeMagicianT 阅读(102) 评论(0) 推荐(0)
摘要: # 129.动态编译与静态编译 ## 1.静态编译 静态编译是将程序代码和库函数一起编译成一个可执行文件的过程。在静态编译过程中,程序代码和库函数的代码被组合在一起,形成一个独立的可执行文件,该文件可以在任何系统上运行,因为它包含了所有所需的代码和库函数。 ### 1.1优点: 1.程序在运行时不需 阅读全文
posted @ 2023-08-02 21:39 CodeMagicianT 阅读(483) 评论(0) 推荐(0)
摘要: # 128.用C语言实现C++的继承 ```C++ #include using namespace std; //C++中的继承与多态 struct A { virtual void fun() //C++中的多态:通过虚函数实现 { cout fun(); //调用父类的同名函数 p1 = &b 阅读全文
posted @ 2023-08-02 21:38 CodeMagicianT 阅读(99) 评论(0) 推荐(0)
摘要: # 127.友元函数和友元类的基本情况 友元提供了不同类的成员函数之间、类的成员函数和一般函数之间进行数据共享的机制。通过友元,一个不同函数或者另一个类中的成员函数可以访问类中的私有成员和保护成员。友元的正确使用能提高程序的运行效率,但同时也破坏了类的封装性和数据的隐藏性,导致程序可维护性变差。 阅读全文
posted @ 2023-08-02 21:38 CodeMagicianT 阅读(37) 评论(0) 推荐(0)
摘要: # 126.友元函数在类内部声明还是内外? 友元函数不一定要在类内声明,普通的友元函数可以在类外声明,也可以在类内声明。 只有友元工厂才必须用到类内声明友元函数。 友元函数可以在类的内部声明,也可以在类的外部声明。 1.如果友元函数是在类的内部声明的,那么它可以直接访问类的私有成员和保护成员,即使这 阅读全文
posted @ 2023-08-02 21:37 CodeMagicianT 阅读(706) 评论(0) 推荐(0)
摘要: # 125.C++从代码到可执行程序经历了什么? ## 1.预编译 主要处理源代码文件中的以“#”开头的预编译指令。处理规则见下: 1. 删除所有的#define,展开所有的宏定义。 2. 处理所有的条件预编译指令,如“#if”、“#endif”、“#ifdef”、“#elif”和“#else”。 阅读全文
posted @ 2023-08-02 21:37 CodeMagicianT 阅读(50) 评论(0) 推荐(0)
摘要: # 124.什么是一致性哈希? **一致性哈希** 一致性哈希是一种哈希算法,就是**在移除或者增加一个结点时,能够尽可能小的改变已存在key的映射关系** 尽可能少的改变已有的映射关系,一般是沿着顺时针进行操作,回答之前可以先想想,真实情况如何处理 一致性哈希将整个哈希值空间组**织成一个虚拟的圆 阅读全文
posted @ 2023-08-02 21:36 CodeMagicianT 阅读(120) 评论(0) 推荐(0)
摘要: # 123.你知道回调函数吗?它的作用? 1.当发生某种事件时,系统或其他函数将会自动调用你定义的一段函数; 2.回调函数就相当于一个中断处理函数,由系统在符合你设定的条件时自动调用。为此,你需要做三件事:1,声明;2,定义;3,设置触发条件,就是在你的函数中把你的回调函数名称转化为地址作为一个参数 阅读全文
posted @ 2023-08-02 21:32 CodeMagicianT 阅读(335) 评论(0) 推荐(0)
摘要: # 122.成员函数里memset(this,0,sizeof(*this))会发生什么 有时候类里面定义了很多int,char,struct等c语言里的那些类型的变量, 可以在构造函数中将它们初始化为0,但是一句句的写太麻烦,所以直接就memset(this, 0, sizeof (*this)) 阅读全文
posted @ 2023-08-02 21:31 CodeMagicianT 阅读(140) 评论(0) 推荐(0)
摘要: # 121.static_cast比C语言中的转换强在哪里? 1. 更加类型安全:`static_cast`在执行类型转换之前会进行类型检查,如果转换不可行,编译时会产生错误或警告。这有助于及早发现潜在的错误并进行修复,而不是在运行时出现未定义的行为。 2. 适用于指针和引用:`static_cas 阅读全文
posted @ 2023-08-02 21:30 CodeMagicianT 阅读(207) 评论(0) 推荐(0)
摘要: # 120.strcpy函数和strncpy函数的区别?哪个函数更安全? 1.函数原型 ```C++ char* strcpy(char* strDest, const char* strSrc) char *strncpy(char *dest, const char *src, size_t n 阅读全文
posted @ 2023-08-02 21:27 CodeMagicianT 阅读(1035) 评论(0) 推荐(0)