![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++20
文章平均质量分 66
XXTongC
这个作者很懒,什么都没留下…
展开
-
C++20学习笔记——头等函数(Lambda闭包)
上述代码定义了一个函数指针,它可以储存参数为long和int、返回值为long的函数地址。但要注意的是不能将包括了fun_ptr的圆括号去掉,如果去掉该语句将被解释为返回long指针类型的函数。这样,我们就可以将fun_ptr指向任何与type_name拥有一样类型的参数与返回类型的函数了。以下写法与上述效果等效;故而很多人建议始终添加取址运算符,因为这样能够增加代码的可读性。double[ ]() {很奇怪是吧,我们同时使用了三种数学上的括号。原创 2023-06-07 20:51:31 · 313 阅读 · 0 评论 -
C++20学习笔记——类模板
/类成员 };完整的类模板特化是类定义而不是类模板。生成类模板特化实例时,不是使用类模板,而是使用为该类型定义的特化。类模板完整特化不需要和原模板完全相同,你可以把它当成和原模版同名的一个特例来使用。注:千万不要去特化函数模板,而应该使用函数重载。但相反的是,类模板的特化是相当安全的。原创 2023-05-07 11:16:14 · 184 阅读 · 0 评论 -
C++20学习笔记——部分多态
在基类中声明为virtual的函数在从基类(直接或间接)派生的所有类中都是虚函数。在派生类中,无论是否把函数指定为virtual,它都是虚函数。原创 2023-04-25 17:00:44 · 105 阅读 · 0 评论 -
C++20学习笔记——多态之纯虚函数
通过定义了Vessel类作为接口,我们可以将其他任意的类声明为Vessel类的派生类来引入接口,Vessel接口的作用就是提供了volume函数的声明,我们可以在派生类中定义它自己需要的volume,让volume在不同的类中做不同的事情。myClass不能被编译,因为它并不“完整”,可以理解为它的show函数没有被定义所以无法被编译,我们不能从函数中返回一个myClass对象,但是可以返回myClass*与myClass&因为这是实现多态的必要操作。原创 2023-04-25 16:58:16 · 80 阅读 · 0 评论 -
C++20学习笔记——运算符重载
现在通过编译后我们便能得到(3, 3)的span3向量了,我们看向函数重载的定义,mySpan mySpan::operator+(const mySpan& InSpan),在 operator前加一个mySpan的限定符是必要的,这使得函数实际上成为mySpan类的成员,以便于我们访问权限为 private的 x和 y。原创 2023-04-25 16:57:26 · 128 阅读 · 0 评论 -
C++20学习笔记——智能指针
智能指针就是帮我们C++程序员管理动态分配的内存的,它会帮助我们自动释放new出来的内存,从而避免内存泄漏!记住添加 memory模块。原创 2023-04-25 16:56:08 · 139 阅读 · 0 评论 -
C++20学习笔记——函数模板template
观察以下代码:我们明显发现print()函数之间的差别只是传入的参数不同,但使用了三次重载来实现,这样的代码复用性低,被视为是垃圾代码,怎么优化呢?这时候我们引入template关键词来实现以上操作实现了第一次编写代码的效果,所以我们可以理解为我们将a的类型变成了可变的量,让编译器自己去判断输入的数据属于什么类型。并且在代码底层逻辑里,print函数并不是真正的函数,它只有在被调用时才会被创建出来以供使用。当然,你也可以显式地表示函数的模板:注:将template< typename T >的ty原创 2023-04-25 16:55:30 · 79 阅读 · 0 评论 -
C++20学习笔记——运算符重载与深拷贝
关于"<<“和”>>"的重载用实现string类来说明深拷贝在类中运用指针时我们得小心一件事:当你需要拷贝一个对象时指针本身会被拷贝但不会拷贝指针指向的空间,也就是,p1与p2指向的是同一块空间!p2指向的不是属于自己类内的元素而是p1的.输出:然后报错了!是的,根据上面的描述我们可以知道,s2在最后也释放了一次m_name,但鉴于s1和s2的m_name都是指向的同一个地址,那么就代表同一个空间被释放了两次!当然这是不合理的,所以抛出了内存管理错误.那么,接下来我们将通过深拷贝来解决这个原创 2023-04-25 16:53:57 · 191 阅读 · 0 评论 -
C++20学习笔记——Array
需添加 array 模块翻译一下就是array<数据类型,大小> 数组名,以下是一个合法的命名从C++17开始,可以使用下列方式进行声明编译器可以通过花括号来判断array的类型,但需注意花括号内的值必须类型相同并且不能为空使用fill()函数可以填满arrayvalues将会被整数2333填满使用size()可以查看array的元素个数,返回size_t类型,并且array总会知道自己含有多少元素。原创 2023-04-25 16:47:36 · 86 阅读 · 1 评论