自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(42)
  • 收藏
  • 关注

原创 右值引用+移动语义move+完美转发forward

如果需要移动语义,建议自己定义,不要编译器合成(编译器是能够使用拷贝,就不会使用移动,除非对象明确定义了移动语义)//正确,左值引用前面加const可以绑定右值。函数传入匿名对象时,匹配的是右值引用形参(或const左值引用形参),而非普通左值引用形参‌。std::move(左值):移动语义,得到右值类型,相当于强制转换 (int&&)val。//错误,18是右值、(18*a)是右值。//正确,r2为左值引用,a为左值。纯右值,18、18*a就是纯右值,后置递增i++(前置递增是左值++i)

2025-07-19 01:44:12 293

原创 基于可变参模板的线程池

【代码】基于可变参模板的线程池。

2025-07-18 21:44:12 62

原创 函数后面加const

在C++中,函数后面加const主要用于修饰成员函数,表示该函数不会修改类的成员变量‌1。

2025-07-15 12:40:42 151

原创 main(int argc,char **agrv)的含义

argc 和 argv 的主要用途为程序运行时,将命令行中的输入参数传递给调用函数。那就是 main 函数声明中使用到的 argc 和 argv 的含义。通常我们写主函数的时候一般都是直接使用int main() 或者 void main() 来声明 main 函数。下面我们动手实践一下,将下面的代码编译后生成对应的可执行程序(.exe)后运行。从上述程序的输出结果可以清楚的看到 argc 和 argv 代表的具体含义。一个存储字符串的数组,会以字符串的形式保存用户调用程序时传入的参数。

2025-07-08 23:29:15 324

原创 Ubuntu更换ip后,vscode重新远程连接失败

2、使用vscode重新配置连接即可,第一次可能失败,多试2次。服务器更换了SSH密钥(比如重装系统后)

2025-07-08 22:29:18 69

原创 Linux常用命令之静态IP配置

但自从有了netplan这两个的配置就很少使用了,也不推荐自己去配。但需要注意,netplan也只能作用于一个网络管理工具,所以就有了renderer选项,而如果renderer指定的网络管理工具都没有启用,那么netplan自然更没法起作用,这也就是为什么netplan有时候抽风不起作用。检查下对应网卡的ip是不是你想要的,如果确定配置没出错,但又没生效,直接重启,如果重启后还是没生效,那就有的玩了。netplan是网络配置生成器,它的作用是生成一套配置给网络管理工具使用,而不是直接配置系统网络。

2025-07-08 22:01:49 112

原创 Qt打包程序

调用Qt编译器bin目录下的windeployqt.exe程序,作用于构建本项目生成的.exe文件“TcpClient.exe”运行项目exe文件,此时仍缺少部分库文件,需要到Qt文件夹中找到后复制过来。同时也找到刚刚构建项目生成的release版本文件夹的release目录。找到安装Qt路径下,与项目相对应编译器版本的bin目录。此时便在对应的路径下生成了release版本的文件夹。此时release目录下生成了很多文件。此时release文件夹的内容。1、选择release版本构建。

2025-07-08 10:21:19 113

原创 虚拟机的共享文件夹

虚拟机——》设置——》选项——》共享文件夹——》添加——》填写相关路径和名称即可。

2025-07-07 19:30:36 183

原创 vscode远程连接Ubuntu Linux调试C++代码

此方法适用于小工程调试,若是大工程,使用cmake。

2025-07-07 19:18:20 189

原创 【C++】volatile

数据的读取与写入过程,如下图:当要读取数据时,CPU从缓存中读取,若缓存命中,则直接返回;若未命中,则从内存中读取。因为这种机制,缓存中的数据与内存中的数据可能就会有差异。在多线程编程中,如果多线程访问的共享数据是放在各自的缓存区,则线程访问的可能是旧数据。加入关键字volatile后,就可以‌,确保每次变量访问都直接读写内存而非缓存副本。

2025-07-02 22:32:53 266

原创 C++多线程【Linux】

Linux的子线程实际上也是个进程,但是比传统的进程轻量化。

2025-06-27 00:01:41 614

原创 动态库与静态库【Linux】

源代码(.cpp) → 预处理(.i) → 编译(.s) → 汇编(.o) → 链接(可执行文件)将多个目标文件(.o)和库文件合成最终的可执行文件。链接分为两种:【静志链接】和【动态链接】,预处理结果会默认输出到终端(可通过重定向保存。参数与源文件名的位置可互换,约定俗成将。参数放在源文件名之前(如。对参数顺序无严格要求,

2025-06-26 17:21:37 276

原创 QT多线程

条件是否自动销毁风险设置+ 线程已停止✅ 是无设置父子关系但线程仍在运行❌ 否程序崩溃未设置父子关系❌ 否内存泄漏最佳实践‌:始终在析构函数中显式调用quit()和wait(),即使设置了父子关系。

2025-06-25 00:08:05 822

原创 C++ inline函数

函数前面加inline,如:{ }1、inline内联函数 和 普通函数的区别:若是inline内联函数,在编译过程中,就没有函数的调用开销了,在函数的调用点直接把函数的代码进行展开处理了2、inline函数不再生成相应的函数符号3、inline只是建议编译器把这个函数处理成内联函数,但是不是所有的inline都会被编译器处理成内联函数----如:递归、函数内容比较多的4、debug版本上,inline是不起作用的;inline只有在release版本下才能出现。

2025-06-23 17:19:24 279

原创 Qt项目,记事本

项目功能:(1)打开文件:点击打开文件按钮弹出对话框,选择文本文件后,在主窗口编辑界面显示内容。(2)关闭文件:关闭打开的文件,并询问是否保存。(3)保存文件:保存文件,新文件要指定路径,旧文件直接保存。(4)编辑界面:显示文本内容,编辑文本。游标所在行高亮标记。(5)快捷键:ctrl+O/S:打开关闭文件,ctrl加滚轮:放大缩小文本编辑框的内容显示。

2025-06-22 21:02:42 266

原创 C++进阶

3、接收返回值是对象的函数调用的时候,优先按初始化的方式接收,不要按赋值的方式接收。2、函数返回对象的时候,应该优先返回一个临时对象,而不要返回一个定文过的对象。1、函数参数传递过程中,对象优先按引用传递,不要按值传递。

2025-06-17 09:47:05 104

原创 Qt的connect()函数

在 Qt 中,connect()函数是实现信号与槽机制的核心,用于建立对象间的通信。

2025-06-13 12:26:25 983

原创 【C++】std::bind和std::placeholders(占位符)

std::bind是C++11引入的函数适配器模板,用于创建新的可调用对象,其核心语法和功能如下。

2025-06-09 21:34:38 370

原创 C++11新标准

新类型C++11新增了类型 long long 和 unsigned long long,以支持64位(或更宽)的整型;新增了类型 char16_t和 char32_t,以支持 16位和 32 位的字符表示;还新增了“原始”字符串。

2025-06-08 21:25:47 817

原创 C++11 智能指针

共享所有权,具有复制语义,多个shared_ptr指向同一个对象时,每个shared_ptr的引用计数都会记录指向该对象的shared_ptr的数量,当最后一个指向对象(和共享计数)的shared_ptr 析构时,它会删除对象和共享计数,通过use_count方法可以获取shared_ptr对象的共享计数值。1、std::shared_ptr的尺寸大于裸指针,一般是裸指针的两倍,因为它内部既包含一个指向到资源的裸指针,也包含一个指向该资源的引用计数的裸指针。

2025-06-08 19:20:30 696

原创 【C++】函数指针

因此,较简单的函数调用是(*pd)[i](av,3),而*(*pd)[i](av,3)是返回的指针指向的值。也可以使用第二种使用指针调用函数的语法:使用(*(*pd)[i])(av,3)来调用函数,而*(*(*pd)[i])(av,3)是指向的double 值。括号的优先级比*运算符高,因此*pf(int)意味着 pf()是一个返回指针的函数,而(*pf)(int)意味着pf是一个指向函数的指针。由于数组名pa是指向函数指针的指针,因此指向数组的指针将是这样的指针,即它指向指针的指针。

2025-06-06 20:12:34 643

原创 C++11

与数组一样,array 对象的长度也是固定的,也使用栈(静态内存分配),而不是自由存储区,因此其效率与数组相同,但更方便,更安全。与传统的初始化方式相比,它对类型转换的要求更严格。如果一个操作数为有符号的,另一个操作数为无符号的,且无符号操作的级别比有符号操作数高,则将有符号转换为无符号操作数所属的类型。在这种情况下,如果两个操作数都是有符号或无符号的,且其中一个操作数的级别比另一个低,则转换为级别高的类型。否则,如果有符号类型可表示无符号类型的所有可能取值,将无符号操作数转换为有符号操作数所属的类型。

2025-06-06 16:39:30 652

原创 C++使用 new 来创建动态数组

这是因为数组在内存中是连续存储的,编译器需要在编译阶段就确定数组的大小,以便正确地分配内存空间。如果允许使用变量来定义数组的大小,那么编译器就无法在编译时确定数组的大小,这样就无法分配正确的内存空间。如果需要动态地定义数组的大小,可以使用动态内存分配的方式,即使用new运算符来在堆上分配内存空间。需要注意的是,使用动态内存分配后,需要在不再使用数组时手动释放内存,以避免内存泄漏。不能使用变量定义数组大小。

2025-06-06 11:56:37 200

原创 虚拟机VMware的Linux系统上安装MySQL

4、通过FinalShell安装MySQL。1、安装VMware和Linux。3、安装Finalshell。2、更换国内阿里云yum源。

2025-05-31 16:59:59 213

原创 MySQL

FROM 表名列表 1 比较运算符>, >=, <, <=, =, <>(!LPAD(str,n,pad) 左填充,用字符串pad对str的左边进行填充,达到n个字 符串长度右填充,用字符串pad对str的。

2025-05-29 00:05:34 725

原创 操作系统原理

缺点:要求进程把他所有的资源一次性申请,而在我们的一个代码段内或者一个临界区内,我们对资源的使用往往不是同时去使用,可能有一定的顺序。2) Swait(S, 1, 1) :相当于记录型信号量(S > 1)或互斥信号量(S = 1)3)Swait(S, 1, 0) :可控开关,S >= 1允许多个进程进入,S = 0禁止进入。对AND信号量扩充,PV操作中指出每类资源申请数量(d)、分配下限值(t),s > t才分配。1)Swait(s, d, d) :只有一个信号量,一次申请d个。

2025-05-04 15:05:29 819

原创 【C++】排序算法

堆排序是采用的二叉堆进行排序的,二叉堆就是一棵二叉树,它需要遍历的次数就是二叉树的深度,而根据完全二叉树的定义,它的深度至少是lg(N+1)。因此,遍历一趟的时间复杂度是O(N),而遍历次数介于lg(N+1)和lg(2N)之间;快速排序是采用的分治法进行遍历的,我们将它看作一棵二叉树,它需要遍历的次数就是二叉树的深度,而根据完全二叉树的定义,它的深度至少是lg(N+1)。归并排序的形式就是一棵二叉树,它需要遍历的次数就是二叉树的深度,而根据完全二叉树的可以得出它的时间复杂度是O(N*lgN)。

2025-05-01 23:55:34 187

原创 C++运算符&& 和 ||

&和逻辑或运算符 || 都是从左到右结合的,在计算机包含“&&”或“||”的表达式时,一旦能确定整个表达式的值,求解就会立即停止。若第一个表达式为假,就不会去处理第二个表达式。若第一个表达式为真,就不会去处理第二个表达式。如果A为false,则不执行B。如果A为false,则执行B。如果A为true,则不执行B。如果A为true,则执行B。

2025-05-01 20:11:46 288

原创 【C++】STL

空间配置器STL大体分为六大组件,分别是:容器、算法、迭代器、仿函数、适配器(配接器)、提供一种方法,使之能够依序寻访某个容器所含的各个元素,而又无需暴露该容器的内部表示方式。有限的步骤,解决逻辑或数学上的问题,这一门学科我们叫做算法(Algorithms)2.算法:各种常用的算法,如sort、find、copy、for_each等。:是指运算过程中不会更改区间内的元素内容,例如查找、计数、遍历、寻找极值等等。例如拷贝,替换,删除等等。常用的数据结构:数组,链表,树,栈,队列,集合, 映射表 等。

2025-04-08 00:30:05 323

原创 【C++】类模板案例——数组类封装

头文件和源文件写一起,后缀命名为 .hpp。

2025-04-07 22:50:29 159

原创 【C++】重载运算符operator

总结1:对于内置的数据类型的表达式的的运算符是不可能改变的。2、作为全局函数重载运算符(当访问类内私有成员时,可以利用友元解决)对已有的运算符重新进行定义,赋予其另一种功能,以适应不同的数据类型。为了实现连续调用<<,重载运算符函数返回值类型要是ostream&<返回类型> operator <运算符符号>(<参数列表>)总结2:不要滥用运算符重载——比如:不要重载加号实现减法内容。为了实现cout在左边,只能利用全局函数重载左移运算符。由于重载后使用的方式非常像函数的调用,因此称为仿函数。

2025-04-07 01:53:22 535

原创 【C++】模板

建议全局函数做类内实现,用法简单,而且编译器可以直接识别。

2025-04-04 01:39:10 716

原创 【C++】文件操作

程序运行时产生的数据都属于临时数据,程序一旦运行结束都会被释放,通过文件可以将数据持久化C++中对文件操作需要包含头文件<fstream >1.文本文件:文件以文本的ASCII码形式存储在计算机中2.二进制文件:文件以文本的二进制形式存储在计算机中,用户一般不能直接读懂它们1.ofstream:写操作2.ifstream:读操作3. fstream:读写操作。

2025-03-30 21:39:13 481

原创 【C++】类和对象

class 类名//访问修饰符://public或protected或private//成员变量和成员方法。

2024-06-21 23:06:57 540

原创 【c++】函数高级

b函数重载碰到默认参数(当函数重载碰到默认参数,出现二义性,报错,尽量避免写函数重载又加默认参数的情况)(2)如果某个位置已经有了默认参数,那么从这个位置往后,从左到右都必须有默认值。a引用作为重载条件,是否加const修饰引用可以作为重载的条件。c函数参数类型不同 或者 个数不同 或者 顺序不同。(1)如果我们自己传入数据。就用传入数据,如果没有,则用默认值。(3)如果函数声明有默认参数,则函数实现不能有默认参数。返回值类型 函数名 (数据类型) {}( 函数的返回值不可以作为函数重载的条件)

2024-06-19 12:41:01 135

原创 【C++】引用符&

/正确,加入const后,编译器优化为int temp =10;(2)C++标准并没有规定引用是否占用内存空间,但是大多数编译器都把引用实现为const指针,所以大部分编译器中引用也是要占内存空间的;//错误,引用本身需要合法的内存空间,因此直接赋值是非法操作。(3)引用是天然const的,所以定义时必须初始化指向变量,否则就没意义了;总结:功能上来说,引用是受限制的指针,相当于用const修饰的指针变量类型;(4)引用本质是指针,是地址,所以才能实现传址调用的效果;

2024-06-19 11:43:49 198

原创 【C++】new运算符

new返回是 该数据类型的指针,利用关键字delete释放。

2024-06-19 10:39:39 105

原创 【C++】程序的内存模型

4、堆区:由程序员分配释放,若程序员不释放,程序结束时由操作系统回收,主要用new在堆区开辟内存。//vs上输出结果为10。b、const修饰的全局变量(注意,const修饰的局部变量不在全局区)1、代码区:存放函数体的二进制码,由操作系统管理。分为4个区域:代码区、全局区、栈区、堆区。2、全局区:存放全局变量和静态变量(3、栈区:由编译器自动分配释放,存放。

2024-06-19 10:30:43 327

原创 【C++】递增运算符

结果为:a2=11;结果为:a3=11;前置++:先运算++,再做其他运算。后置++:先做其他运算,再运算++

2024-06-19 08:58:36 380

原创 【C++】标识符的命名规则:

标识符不能是关键字.标识符只能由字母、数字、下划线组成第一个字符必须为字母或下划线标识符中字母区分大小写。建议:给标识符命名时,争取做到见名知意的效果,方便自己和他人的阅读。

2024-06-19 08:54:13 142

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除