- 博客(17)
- 收藏
- 关注
原创 Lambda表达式
当捕获列表为"="时,函数选项为mutable时,函数体内可以改变捕获列表的值,但仅在函数内改变有效,(就像正常的不带引用函数一样)当捕获列表为"&"时,函数体内可以任意改变捕获列表的值,(就像带引用的函数一样)注:当捕获列表为"="时 ,函数体内部不可以改变任何从外部捕获的值。
2024-10-14 15:00:29
194
原创 可调用对象包装器、绑定器
" 可调用对象 " 这个词仅看这个名字可能有些难理解 ,我们将其剖析一下成"可调用 "和 "对象 "两个部分 ,我们通常听到 "调用"这个词语是在函数中 -->就是 调用某某某函数 ,这里也是如此,就是将某个对象拥有函数的功能,像调用某个函数一样 调用这个对象。(大多数情况下这个对象就是一个函数指针 也就可以理解为"可调用函数"。3.是一个可被转换为函数指针的类对象 -->写了一个关于其的blog。我们会发现:这种 就是像一个函数一样调用出来 ,所以叫"可调用对象"2.可调用对象的包装器。
2024-10-12 23:50:33
229
原创 可被转换成函数指针的类对象 (拓展于可调用对象)
在这里为什么必须要有一个return 调用的函数指针呢,因为 我们是要实例化出一个对象,从而用对象加()进行初始化和调用 ,就像下面这个例子,简洁的理解就是:我们用func_ptr 告诉大家我们要将类对象转换为什么类型的指针,return后面的就是 我们要将示例出的对象=调用具体哪个函数 (因为将类对象转换成函数指针 我们将对象示例化出来后 相当于调用了某个函数 ),所以func_otr和print的类型必须一模一样。什么是可被转换成函数指针的类对象呢,用下面的例子介绍一下。
2024-10-12 23:08:04
310
原创 基于范围的for循环
基于范围的for循环的原理:我们传入的第二个参数 是一个容器或者数组 而这种容器或者数组都是有本身自己的长度(范围)的,我们只需要从这个容器的头 (默认)遍历到容器的尾即可,(可以理解为容器提供了默认的范围)。在上面的例子中,是将容器中遍历的当前元素拷贝到了声明的变量value中,因此无法对容器中的元素进行写操作,如果需要在遍历过程中修改元素的值,需要使用引用。基于范围的for循环是C++11中的新语法,我们对比一下过去的非范围的for循环 和 现在的范围for循环。
2024-10-11 18:02:27
430
原创 初始化列表
如果使用列表初始化对对象初始化时,还需要判断这个对象对应的类型是不是一个聚合体,如果是初始化列表中的数据就会拷贝到对象中。1.对 initializer_list 容器赋值时只能整体赋值 将所有数据全传进去 (不能一个一个数据传)3. initializer_list 内的 迭代器 是只读的 (侧面应证1的内容)那么,使用列表初始化时,对于什么样的类型C++会认为它是一个聚合体呢?2. initializer_list 内的数据必须是相同类型的。轻量级的容器类型 initializer_list。
2024-10-11 17:15:54
178
原创 委托构造函数 与 继承构造函数
2.父类和子类中有重名函数(即函数重载,但不是虚函数重写),而我们创建子类对象 想调用父亲的重名函数是无法调用的 会编译失败。1.父类有多个构造函数 子类若继承该父类 就要把这些父亲的构造函数都写出来 作为 子类的构造函数。我们会发现下面的有参构造函数都是上面的复制后续写 C++11后可以这样写。解决上述两个问题可以用继承构造函数。
2024-10-05 19:25:16
376
原创 using 与 typedef
在C++11 中加入了using 关键词 但是using 和typedef的差距也不是非常明显。typedef 上述办不到 而using可以办到。介绍两种用using的情况。
2024-10-05 02:56:47
304
原创 默认模板参数
当所有模板参数都有默认参数时,函数模板的调用如同一个普通函数。但对于类模板而言,哪怕所有参数都有默认参数,在使用时也必须在模板名后跟随<>来实例化。另外:函数模板的默认模板参数在使用规则上和其他的默认参数也有一些不同,它没有必须写在参数表最后的限制。1.只要给 "模板" 传类型 就是按照模版的顺序传 从前往后传。N被赋类型为double T根据99.9自动推导为double。我们只需将N T的位置互换 结果就会正确。
2024-10-05 02:39:56
305
原创 final 与 override
override 虚函数重写 目的:提高代码可读性 告诉大家我要重写虚函数 而且如果重写虚函数出现错误(比如 函数名错误 参数错误) 编译器也会报错。用来 阻断继承 和 阻断虚函数继续 “重写” (断子绝孙)
2024-10-04 20:15:54
200
原创 declare type -->decltype
常规:1. 表达式为普通变量或者普通表达式或者类表达式,在这种情况下,使用decltype推导出的类型和表达式的类型是一致的。2.表达式是函数调用,使用decltype推导出的类型和函数返回值一致。特殊:当表达式是一个左值 或者 被()包围,使用decltype推导出的是该类型的引用。2.函数的返回值不确定(由于return 的 变量类型不确定)1.容器不确定 --> 迭代器类型的不确定。自动类型推导 decltype。多用于模板中不确定类型的推导。
2024-10-04 19:57:01
286
原创 Auto 自动类型推导
当变量不是指针或者引用类型时,推导的结果中不会保留const、volatile关键字。2.函数模板 或 类模板 因函数重载 不确定返回值类型 可以利用 auto 接受。当变量是指针或者引用类型时,推导的结果中会保留const、volatile关键字。auto 的常规推导很简单 除了带有const的特殊情况。引用&符号不会被auto继承继承。3.最适合使用auto的情景。带有const的推导规则。2.不能用auto来定义数组。1.不能用于类内非静态。
2024-09-28 18:55:09
207
原创 const 与 constexpr
const int 修饰b b为int类型的常量 因为常量只有在初始化的时候才可以赋值 ---> 也就是可以理解为常量只能赋值一次(而且还得是初始化的时候) ∴ 常量可以在初始化的时候用变量来赋值 让常量等于变量的值 初始化之后就改变不了值了。我们可以为 constexpr 是 const 功能中的一种 (因为编译器无法区分我们使用的 const的功能是哪一种 所以用constexpr关键词连限制)但大多数const都是 修饰常量 的功能。下面讲述const 与 constexpr 的联系。
2024-09-28 16:11:20
386
原创 NULL 与 nullptr
传入nullptr会报错 因为 nullptr 为指针类型 并且可以隐式转换为任意指针类型 但是 指针类型无法转换为变量类型 则会报错。nullptr 是 指针类型(可以随意转化成 int *,double * 等等)(只能修饰指针!因为其中NULL的int类型 进行了隐式转换成了int* 类型 从而成功。为什么我们通常 为了避免野指针 用 int* a =NULL 不出错。传NULL时 是会调用void func(int p) 函数的。而如果函数只有传参为int a 的函数时。
2024-09-26 22:57:50
229
原创 原始字面量
我们想输出该字符串得到分行的结果时 这个方法会非常的低效(甚至无法实现)语法:R" ( 你想得到的字符串 )"1. 对有两重性的字符串进行唯一化 得到你本身想要得到的字符串。系统会将 在字符串里的 \n \t 自动转化为换行符 制表符。需要 符号 \ 来控制 会导致代码可读性较差。,即只得到字符串内部的数据 而不进行任何的处理。所以C++11推出了一个通用的方法。如果想把字符串的初始化分成多行写。可以将多行的字符串进行初始化。
2024-09-26 21:42:12
206
原创 函数指针介绍
/ int (*) (int,int) 为一个函数指针类型 定义func变量。int 代表函数的返回值得是int (double,int)代表函数的参数仅有2个,且类型分别为double 与int。·函数指针 可以理解为用 一个指针 来代替多个 返回值类型相同,参数个数相同,参数类型相同(只有函数名不同的)多个函数名。注:返回值类型相同,参数个数相同,参数类型相同只要有一个与函数指针不相同 都不能用该函数指针。即 int (*) (int,int) == decltype(add)
2024-09-26 15:05:04
310
原创 优先队列(大根堆 小根堆)
priority_queue 容器适配器为了保证每次从队头移除的都是当前优先级最高的元素,每当有新元素进入,它都会根据既定的排序规则找到优先级最高的元素,并将其移动到队列的队头;表示形式:priority_queue 或priority_queue(默认形式)特点 : 堆顶为该优先队列中值最大的 整个队列按照降序排序 (该方式也是优先队列的默认方式)} */ 普通的成员函数是不允许的。注意: < 参数1,vector ,比较方式>
2024-08-19 18:27:48
747
原创 类的三种调用方式
/"opq" 是const char *类型的 上面的string类型与之对应不上。cout<<"默认"<<endl;cout<<"拷贝"<<endl;cout<<"析构"<<endl;cout<<"有参"<<endl;//类的三种调用方式。
2024-07-27 12:27:41
437
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人