随笔分类 -  语言相关 / C++

C++的豆知识
摘要:1.成员列表初始化的作用 编译器以类中的成员声明顺序在构造函数之内安插初始化操作,并且在任何显示用户代码(构造函数的函数体)之前。(注意真实的初始化顺序是由类中的成员声明顺序,而不是初始化列表上显式标出的顺序) 2.必须使用成员初始化的情况 (1)当初始化一个引用成员时 (2)当初始化一个常量成员时 阅读全文
posted @ 2023-02-10 05:12 mshentai 阅读(106) 评论(0) 推荐(0)
摘要:1.构造函数的执行顺序(构造顺序) (1)虚拟基类的构造函数 (2)基类的构造函数 (3)成员对象的构造函数(初始化顺序为成员声明的顺序) (4)自身的构造函数 2.析构函数的执行顺序(析构顺序) (1)自身的析构函数 (2)成员对象的析构函数(析构顺序为成员声明的逆序) (3)基类的构造函数 (4 阅读全文
posted @ 2023-02-10 05:01 mshentai 阅读(229) 评论(0) 推荐(0)
摘要:1.malloc函数 使用方法:参数是所需申请的内存块的字节数,返回指向申请的内存块的首地址的无类型指针,malloc申请的内存块是未初始化的。 函数原型: void* malloc(size_t num_size);//num_size = 需要申请的字节数 使用案例: int* p = (int 阅读全文
posted @ 2023-02-10 00:58 mshentai 阅读(112) 评论(0) 推荐(0)
摘要:reinterpret_cast 使用形式:reinterpret_cast<type-id>(expression) type-id必须是一个指针、引用、算术类型、函数指针或者成员指针。它可以用于类型之间进行强制转换(不可移植,依赖底层实现)。 const_cast 使用形式:const_cast 阅读全文
posted @ 2022-12-16 22:49 mshentai 阅读(114) 评论(0) 推荐(0)
摘要:成员初始化列表的概念 在类的构造函数中,通过在构造函数的括号和花括号之间使用冒号和成员变量初始化列表进行初始化,而不是在函数体对成员变量进行初始化。 注意:初始化顺序是在类中成员变量的声明顺序,而不是初始化列表的排列顺序。 初始化列表和函数体初始的效率对比 利用初始化列表对成员变量进行初始化比在函数 阅读全文
posted @ 2022-12-16 21:24 mshentai 阅读(101) 评论(0) 推荐(0)
摘要:内存泄漏的含义 内存泄漏一般是指堆内存(即动态分配的内存)的泄漏。在程序通过malloc、calloc或new从堆中申请的内存后,需要通过free或delete显式释放这些内存块,否则,这些内存得不到释放,从而可使用的内存减少,这就是所谓的内存泄漏。 避免内存泄漏方式 1.基类的析构函数应当声明为虚 阅读全文
posted @ 2022-12-16 20:53 mshentai 阅读(106) 评论(0) 推荐(0)
摘要:封装:可以将事物的属性和行为抽象出来,封装在一个类中。 继承:子类可以从基类上继承其(全部或部分)属性和函数。 多态:多态是指一个接口,对应多种实现。C++的多态性具体体现在编译和运行两个阶段。编译时多态是静态多态,在编译时就可以确定使用的接口,例如函数重载和模板。运行时多态是动态多态,具体引用的接 阅读全文
posted @ 2022-10-18 11:34 mshentai 阅读(87) 评论(0) 推荐(0)
摘要:同步和异步是一双相对的概念,阻塞和非阻塞是另一双相对的概念,即同步 != 阻塞,异步 != 非阻塞。 1.同步与异步 同步是指在发布任务(过程调⽤)时,必须一项一项任务(过程调⽤)进行安排,只有在等待前置任务(过程调⽤)出结果后才能安排后继任务(过程调⽤)。异常是同步的,即在发生异常的时刻,系统会立 阅读全文
posted @ 2022-09-06 23:10 mshentai 阅读(85) 评论(0) 推荐(0)
摘要:原文:浅谈 C++ 中的 const 和 constexpr,原文中“用constexpr修饰某物并不保证它一定在编译时被计算,也可以在运行时被计算”,我觉得是错误的。 const和constexpr都可以来修饰对象和函数。 修饰对象的时候两者之间最基本的区别是: const修饰一个对象表示它是常量 阅读全文
posted @ 2022-07-29 15:51 mshentai 阅读(235) 评论(0) 推荐(0)
摘要:1、值传递 值传递,会将实参的值拷贝到被调函数的作用域中,产生一个局部变量,该局部变量的变化不会影响实参。 2、指针传递 指针传递,其本质上也是值传递,传递的值是一个地址。在被调函数的作用域中改变局部指针变量的值,是不会影响原实参指针的。但是局部指针变量可以进行解引用,对其引用对象进行修改。 3、引 阅读全文
posted @ 2022-07-28 17:43 mshentai 阅读(131) 评论(0) 推荐(0)
摘要:1.智能指针的作用和定义 智能指针的作用是管理指针所指向的内存的生命周期,能够管理(控制)该内存的共享和释放,避免用户在使用完该内存后忘记释放,造成内存泄漏。 智能指针是普通(原生的,即未封装的)指针的封装,在提供普通指针的功能同时,管理指针所指向的内存空间,当智能指针的实例超出其作用域是,会自动调 阅读全文
posted @ 2022-07-28 17:30 mshentai 阅读(708) 评论(0) 推荐(0)
摘要:该软渲染器的意义在于深入学习渲染管线的流程,在不使用图形API的情况下,实现对三维模型的渲染。 已实现目标 1、透视投影和透视校正每个顶点参数插值。 2、在NDC空间进行背面剔除。 3、采用 Clamp 纹理寻址实现纹理采样。 4、实现Z 缓冲(反转 z)、深度测试,模板缓冲和模板测试。 5、实现 阅读全文
posted @ 2022-07-24 18:38 mshentai 阅读(167) 评论(0) 推荐(0)
摘要:多态是指为不同数据类型的实体提供统一的接口。 编译时多态,也称静态多态,是指在编译是编译器会根据参数个数、参数类型、参数顺序和函数是否const来决定调用哪一个同名函数,或者根据模板参数来生成相应的模板类,其体现即函数重载和模板。 运行是多态,也称动态多态,是指程序在运行时,会根据调用者的类型,调用 阅读全文
posted @ 2022-07-13 16:37 mshentai 阅读(226) 评论(0) 推荐(0)
摘要:前置知识: capacity是指容器的容量,指该容器如果不重新分配内存,最多只能容纳capacity个元素。 size是指容器中当前存在的元素个数。 capacity和size的关系:size <= capacity reserve(n)是指为容器至少预分配n * sizeof(元素)的容量。如果分 阅读全文
posted @ 2022-07-13 15:54 mshentai 阅读(167) 评论(0) 推荐(0)
摘要://时间复杂度O(n),空间复杂度O(1) int numKLenSubstrRepeats(string s, int k) { char reChar = 0;//当前重复字符 int num = 0;//满足要求的子串数量 vector<short> inQueue(26, 0);//在队列中 阅读全文
posted @ 2021-11-13 21:15 mshentai 阅读(191) 评论(0) 推荐(0)
摘要:NC7 买卖股票的最好时机 方法的时间复杂度O(n),空间复杂度O(1) int maxProfit(vector<int>& prices) { //当前利润 int curProfit = 0; //当前最大利润 int result = 0; for (int i = 1; i < price 阅读全文
posted @ 2021-09-18 08:45 mshentai 阅读(83) 评论(0) 推荐(0)
摘要://给出一组区间,请合并所有重叠的区间。 //请保证合并后的区间按区间起点升序排列。 //区间结构体 struct Interval { int start; int end; Interval() : start(0), end(0) {} Interval(int s, int e) : sta 阅读全文
posted @ 2021-08-20 10:45 mshentai 阅读(918) 评论(0) 推荐(0)
摘要:构造函数的作用是初始化实例的非静态(static)数据成员,以及在函数体内的一些由程序员指定的工作。 析构函数的作用则与构造函数相反,是将实例所动态申请的资源(在函数体内由程序员控制,如果操作不当,将造成内存泄漏),并销毁实例的非静态(static)数据成员。 构造函数的函数名与类名相同,没有返回值 阅读全文
posted @ 2021-08-08 16:30 mshentai 阅读(147) 评论(0) 推荐(0)
摘要:priority_queue是C++的优先队列,优先队列是指具有在出队时,最高优先级的元素先出特征的队列。 其头文件为#include <queue> priority_queue操作与queue类似,但priority_queue在入队和出队时会对内部元素按规则进行排序。 其定义为 templat 阅读全文
posted @ 2021-07-16 09:35 mshentai 阅读(449) 评论(0) 推荐(0)
摘要:const与指针的组合,可能会稍微有点令人困扰。 const的作用是限定一个对象为常量,在定义const 对象后, 对象的值在程序中将不能被改变。 指针*是一种对象(用来存储其他对象的内存地址),它可以指向另外一个对象。 如果const与指针组合起来,const是限定指针对象,还是限定指针指向的对象 阅读全文
posted @ 2021-07-03 19:45 mshentai 阅读(82) 评论(0) 推荐(0)