
C++
文章平均质量分 88
C++
不会写算法的小沈
这个作者很懒,什么都没留下…
展开
-
[C++11]右值引用
这就和历史有关,由于C++的代码存量大,许多的代码在当初书写时并没有右值引用的提出,所以C++11为了向前兼容,就会根据情况判断是否隐式调用move。总结:两者的底层都是指针,唯一不同的就是他们所指的位置。当然,我们所写的右值引用版本的拷贝构造当然用的是方法2,而return时move(v)就是为了让这个v的右值版本去return(move不修改v的原本属性)按照我们前面所说,v返回的时候先调用移动拷贝,然后再调用构造来构造ret,但是编译器为了更高的效率,还会在此基础上进一步优化。原创 2024-03-31 15:56:52 · 1006 阅读 · 1 评论 -
[C++11]可变参数模板
让我们先见一下可变参数模板//...一个可变参数模板(variadic template)就是一个接受可变数目参数的模板函数或模板类。可变数目的参数称为参数包(parameter packet)。模板参数包(template parameter packet),表示零个或多个模板参数;函数参数包(function parameter packet),表示零个或多个函数参数。让我们带着以下几个问题去学习可变参数模板可变参数模板如何实例化如何书写可变参数模板可变参数模板的运用—emplace系列。原创 2024-03-31 15:56:39 · 905 阅读 · 0 评论 -
[C++读书笔记]常量表达式&constexpr
被constexpr修饰的变量本身是不能修改的,但是它指向/引用的非const/非constexpr对象则可以被修改所以如果你不想指向/引用的对象可以被修改,要么给该对象加上const,要么给该对象加上constexpr。原创 2024-03-13 20:21:43 · 945 阅读 · 0 评论 -
[C++]AVL树怎么转
一提到AVL树,脑子里不是旋了,就是悬了。AVL树之所以难,并不是因为结构难以理解,而是因为他的旋转。bf[-1,1]AVL树是二叉搜索树的衍生,其名字来源是根据两位俄罗斯的数学家和E.M.Landis,他们在1962年发明的一种用来解决二叉搜索树在极端情况下时间复杂度变为O(n)的情况。而其解决该情况的方法便是:通过旋转旋转来调整二叉搜索树的平衡。原创 2024-03-02 20:33:45 · 1061 阅读 · 0 评论 -
[C++]STL的map如何重载[]
解引用后,调用其第二个元素(key-value中的value),对其++,这样就可以使得该元素的计数+1(即map中value值+1)。如果该元素是第一次插入,则这个解引用的值是0(当类型是内置类型时),对其++,也变成了1。是一个迭代器,指向的内容有两种可能:1、如果map中在插入前没有该元素,则指向我将要插入的pair(即刚刚创建的pair)2、如果map中在插入前已经有了该元素,则指向map中的这个元素(这个元素也是一个pair)调用的是步骤2返回的pair的第一个元素,是一个。原创 2024-02-29 17:23:44 · 1128 阅读 · 0 评论 -
[C++]单/多继承体系中的虚函数表
对于单继承体系中的基类派生类中的虚表关系如下:基类有虚函数,所以基类有一个自己的虚表指针,指向自己的虚表,虚表中存放的就是func1()的地址。派生类继承了基类的虚函数,所以有一个自己的虚表指针,指向自己的虚表,因为派生类重写了基类的虚函数,所以虚表中func1()函数的地址与基类不同。同时派生类又增加了一个虚函数,所以他的虚表里面有两个函数地址。原创 2024-02-04 21:17:43 · 999 阅读 · 0 评论 -
迭代器失效
迭代器(iterator)是一种用来访问容器的工具(其底层就是一个指针、或者是一个被封装的指针),对于每种容器,STL都会提供对应的迭代器,而我们对这些容器内容的访问,就转变成对迭代器的遍历,进而实现对于不同容器内元素的访问方式统一。原创 2024-01-20 11:31:37 · 444 阅读 · 0 评论 -
[c++]多态的原理
OOP的核心思想是多态性。多态性这个词源自希腊语,其含义是“多种形式”。我们把具有继承关系的多个类型称为多态类型,因为我们能使用这些类型的“多种形式”而无须在意它们的差异。引用或指针的静态类型与动态类型不同这一事实正是C++语言支持多态性的根本所在。在C++语言中,当我们使用基类的引用或指针调用一个虚成员函数时会执行动态绑定。上述内容表明,C++中多态的原理与动态绑定联系十分密切。原创 2024-02-04 15:29:11 · 909 阅读 · 0 评论 -
手搓反向迭代器
对于这一对运算符,他们要做的正好和符号相反,++要实现的实际上是正向迭代器的- -,所以实现起来也很简单,反向迭代器的++调用正向迭代器的- -,反向迭代器的–调用正向迭代器的++原创 2024-01-26 15:39:13 · 918 阅读 · 0 评论 -
传参时:传值、传址、传引用的汇编指令
1、传值传参:把实参的数据拷贝一份,放进寄存器,然后赋值给对应的形参把x,y的值,分别放入一个寄存器里面(后面用call调用函数)然后调用函数创建栈帧的前两步就把寄存器edx,ecx的值放进对应的a,b的位置了(这里0x000000DAF16FF510和0x000000DAF16FF518就是后面a,b的地址)进行加法操作int c = a + b:分别将a、b的值放入ecx、e原创 2023-10-28 11:05:22 · 470 阅读 · 1 评论 -
C++传引用
是定义一个新的变量,使得其地址处存的值等于a。是对a的一个引用,此时c的地址就是a的地址。对c做改变,就是对a地址处的值做改变。对b做改变,改变的是b地址处存的值。指针可以不初始化,让他指向随机值。指针可以不初始化,让他指向随机值。1、引用必须初始化,应该写做。1、引用必须初始化,应该写做。原创 2023-10-31 14:47:10 · 78 阅读 · 1 评论 -
C++ 改进 C 内容之——inline(内联函数)
可以把内联函数就理解成一个宏,碰到add就替换掉他因为内联函数是直接替换函数的调用、链接的时候不可能生成地址,所以如果定义在第3个文件中,那么这个函数是没有地址的,链接的目的就是找函数地址,这样就发生了:只有add函数的声明,而没有定义,所以就会报错。原创 2023-10-19 12:42:27 · 518 阅读 · 1 评论 -
C++默认成员函数(构造,拷贝构造,析构...)详解
完成初始化任务上图分为重点重点从函数的中可以看出内置类型:int/double/char/指针…(原生定义类型)Tips:在C++11后,编译器支持在函数声明处给缺省值来初始化,这点会在后面的初始化列表提到。原创 2023-11-10 21:50:44 · 137 阅读 · 1 评论 -
C++多文件编译时报错解决方案(.h.cpp.cpp)
该情况是因为缺省参数同时用在了定义和声明的参数里面(C++不允许声明和定义同时给缺省参数)在定义里面去掉缺省参数(一般不会在声明的时候去除缺省)报错如图,这种错误第一次见到都会无从下手其实错误很简单,就是包含头文件的时候,如果头文件里面有全局、静态变量/函数,那么就会导致这个变量/函数会被每个.cpp文件包含一次。这就导致在链接的时候,会发生重定义现象(上图也表明了是在链接的时候出的错)将该变量/函数放入**.cpp**文件中。原创 2023-12-02 15:19:04 · 1885 阅读 · 0 评论