随笔分类 - 语言相关
记录编程语言相关的知识。
摘要:在Lua中除了table是引用传递外,其他基本都是值传递。 1、值传递 值传递,会将实参的值拷贝到被调函数的作用域中,产生一个局部变量,该局部变量的变化不会影响实参。 2、引⽤传递 在引用传递过程中,被调函数的形式参数也作为局部变量在栈中开辟了内存空间,但是这时存放的是由主调函数放进来的实参变量的地
阅读全文
摘要:在Lua语言中,ipairs和pairs都可以应用于对表和数组的遍历,但它们之间有什么区别呢? 首先,我们要知道Lua中的表可以以数字或字符串作为表的键key,但用数字作为key时,可以称为数字索引。当以连续不间断的数字索引作为表的key时,这种表就可以称为数组。如果在创建表是不为值设置key,系统
阅读全文
摘要:require时Lua语言中负责加载库的函数,他和dofile的区别主要在于: 1.require会判断是否文件已经加载避免重复加载同一文件; 2.require会搜索目录加载文件。 require的目录搜索路径: 用于搜索Lua文件的路径是变量package.path的当前值,当package初始
阅读全文
摘要:1.成员列表初始化的作用 编译器以类中的成员声明顺序在构造函数之内安插初始化操作,并且在任何显示用户代码(构造函数的函数体)之前。(注意真实的初始化顺序是由类中的成员声明顺序,而不是初始化列表上显式标出的顺序) 2.必须使用成员初始化的情况 (1)当初始化一个引用成员时 (2)当初始化一个常量成员时
阅读全文
摘要:1.构造函数的执行顺序(构造顺序) (1)虚拟基类的构造函数 (2)基类的构造函数 (3)成员对象的构造函数(初始化顺序为成员声明的顺序) (4)自身的构造函数 2.析构函数的执行顺序(析构顺序) (1)自身的析构函数 (2)成员对象的析构函数(析构顺序为成员声明的逆序) (3)基类的构造函数 (4
阅读全文
摘要:1.malloc函数 使用方法:参数是所需申请的内存块的字节数,返回指向申请的内存块的首地址的无类型指针,malloc申请的内存块是未初始化的。 函数原型: void* malloc(size_t num_size);//num_size = 需要申请的字节数 使用案例: int* p = (int
阅读全文
摘要:reinterpret_cast 使用形式:reinterpret_cast<type-id>(expression) type-id必须是一个指针、引用、算术类型、函数指针或者成员指针。它可以用于类型之间进行强制转换(不可移植,依赖底层实现)。 const_cast 使用形式:const_cast
阅读全文
摘要:成员初始化列表的概念 在类的构造函数中,通过在构造函数的括号和花括号之间使用冒号和成员变量初始化列表进行初始化,而不是在函数体对成员变量进行初始化。 注意:初始化顺序是在类中成员变量的声明顺序,而不是初始化列表的排列顺序。 初始化列表和函数体初始的效率对比 利用初始化列表对成员变量进行初始化比在函数
阅读全文
摘要:内存泄漏的含义 内存泄漏一般是指堆内存(即动态分配的内存)的泄漏。在程序通过malloc、calloc或new从堆中申请的内存后,需要通过free或delete显式释放这些内存块,否则,这些内存得不到释放,从而可使用的内存减少,这就是所谓的内存泄漏。 避免内存泄漏方式 1.基类的析构函数应当声明为虚
阅读全文
摘要:封装:可以将事物的属性和行为抽象出来,封装在一个类中。 继承:子类可以从基类上继承其(全部或部分)属性和函数。 多态:多态是指一个接口,对应多种实现。C++的多态性具体体现在编译和运行两个阶段。编译时多态是静态多态,在编译时就可以确定使用的接口,例如函数重载和模板。运行时多态是动态多态,具体引用的接
阅读全文
摘要:同步和异步是一双相对的概念,阻塞和非阻塞是另一双相对的概念,即同步 != 阻塞,异步 != 非阻塞。 1.同步与异步 同步是指在发布任务(过程调⽤)时,必须一项一项任务(过程调⽤)进行安排,只有在等待前置任务(过程调⽤)出结果后才能安排后继任务(过程调⽤)。异常是同步的,即在发生异常的时刻,系统会立
阅读全文
摘要:原文:浅谈 C++ 中的 const 和 constexpr,原文中“用constexpr修饰某物并不保证它一定在编译时被计算,也可以在运行时被计算”,我觉得是错误的。 const和constexpr都可以来修饰对象和函数。 修饰对象的时候两者之间最基本的区别是: const修饰一个对象表示它是常量
阅读全文
摘要:1、值传递 值传递,会将实参的值拷贝到被调函数的作用域中,产生一个局部变量,该局部变量的变化不会影响实参。 2、指针传递 指针传递,其本质上也是值传递,传递的值是一个地址。在被调函数的作用域中改变局部指针变量的值,是不会影响原实参指针的。但是局部指针变量可以进行解引用,对其引用对象进行修改。 3、引
阅读全文
摘要:1.智能指针的作用和定义 智能指针的作用是管理指针所指向的内存的生命周期,能够管理(控制)该内存的共享和释放,避免用户在使用完该内存后忘记释放,造成内存泄漏。 智能指针是普通(原生的,即未封装的)指针的封装,在提供普通指针的功能同时,管理指针所指向的内存空间,当智能指针的实例超出其作用域是,会自动调
阅读全文
摘要:该软渲染器的意义在于深入学习渲染管线的流程,在不使用图形API的情况下,实现对三维模型的渲染。 已实现目标 1、透视投影和透视校正每个顶点参数插值。 2、在NDC空间进行背面剔除。 3、采用 Clamp 纹理寻址实现纹理采样。 4、实现Z 缓冲(反转 z)、深度测试,模板缓冲和模板测试。 5、实现
阅读全文
摘要:多态是指为不同数据类型的实体提供统一的接口。 编译时多态,也称静态多态,是指在编译是编译器会根据参数个数、参数类型、参数顺序和函数是否const来决定调用哪一个同名函数,或者根据模板参数来生成相应的模板类,其体现即函数重载和模板。 运行是多态,也称动态多态,是指程序在运行时,会根据调用者的类型,调用
阅读全文
摘要:前置知识: capacity是指容器的容量,指该容器如果不重新分配内存,最多只能容纳capacity个元素。 size是指容器中当前存在的元素个数。 capacity和size的关系:size <= capacity reserve(n)是指为容器至少预分配n * sizeof(元素)的容量。如果分
阅读全文
摘要://时间复杂度O(n),空间复杂度O(1) int numKLenSubstrRepeats(string s, int k) { char reChar = 0;//当前重复字符 int num = 0;//满足要求的子串数量 vector<short> inQueue(26, 0);//在队列中
阅读全文
摘要:今天在学可空类型的时候,看见两个关键字——implicit和explicit。 public static implicit operator T? (T value); public static explicit operator T(T? value); 这两个关键字是一对用于类型转换的关键字
阅读全文