自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 CString中的字符编码问题

CString是一个封装好了的类,封装时必须考虑兼容问题,CString在多字节(ansi)环境下为CStringA,在Unicode环境下为CStringW,所以CString等价于(也就是CString封装类中实际使用的类型)LPCTSTR ,LP表示指针,C表示常量不是很重要,重要的是T这是个宏,表达的意思类似于模板参数,LPCTSTR 是一个typedef声明的一个类型,如果定义了unicode编码,宏T也表示宽字符(W表示宽字符),即一个字符占2字节。

2024-01-22 13:59:41 384

原创 乐观锁悲观锁之CAS

不同于悲观锁,乐观锁是人为控制的。但是CAS有一个问题那就是会产生ABA问题,ABA问题就是在比较更新之前,进行了两次或以上操作,数据保持不变,也就是假如数据V将要进行Z操作读取之后、更新之前,被X操作增加了1,又被Y操作减少了1,此时V是被修改过的,但是Z操作检测不到,于是忍仍然对数据进行了更新。过程:读取到值V时,检查原来的值是否还为V,当且仅当V的值等于A时,CAS通过原子的方式用新值B来更新V的值,否则将自旋,CAS利用CPU指令,从硬件层面保证了操作的原子性,以达到类似于锁的效果。

2024-01-18 15:45:59 393 1

原创 C/C++ 内存分配管理

与malloc和calloc相比,new具有更好的类型安全性,并能自动调用构造函数进行对象的初始化,所以不需要进行类型转换。ptr是原来的空间地址,newsize是新申请的空间大小,如果原内存空间后面有足够的空间,则直接扩容,否则需要寻找新的足够大的内存空间,返回申请到的空间的地址。返回类型:new返回指向指定类型的已分配内存空间的指针,并且可以自动确定所需内存的大小,而malloc返回void*类型的已分配内存空间的指针,需要手动确定内存大小。//申请的空间的单位是字节,这里表示申请20个字节。

2023-12-27 10:50:57 850 1

原创 C++ noexcept 标识符

noexcept是一个C++11引入的关键字,用于表示一个函数或表达式在执行期间是否会抛出异常。

2023-12-25 16:59:13 333 1

原创 C++ 左值引用和右值引用

左值引用其实就是给右值起一个别名,使得右值可以进行赋值改变int fun()int a = 1;return a;fun() = 2;//报错//报错总结:所以区分左值与右值的规则是:“左值可以取地址,右值不能取地址”,因为左值一般是被放在内存地址空间中,有明确的存储地址;而右值一般可能是计算中产生的中间值、临时变量,也可能是被保存在寄存器上的一些值,总的来讲就是,右值并没有被保存在内存地址空间中,也就无法取地址。

2023-12-25 15:33:25 1121 1

原创 C++ 智能指针

野指针:没有被初始化且没有被置为NULL或nullptr的指针int * p;悬空指针:指向的内存已经被释放的指针p = p2;delete p2;解决办法野指针:定义指针变量及时初始化,要么置空。悬空指针:释放操作后立即置空。简单的赋值拷贝操作,将原对象或原数组的引用(地址)直接赋给新对象,新数组,新对象/新数组只是原对象的一个引用(地址)创建一个新的对象和数组,重新申请空间,将原对象的各项属性的“值”(数组的所有元素)拷贝到新申请的空间指针和引用本质都地址,通过地址访问值。

2023-12-21 17:45:43 1042

原创 C++ 模板

模板时C++中的一种特性,允许函数或类(对象)通过泛型的形式表现或者运行,模板分为类模板和函数模板,实例化后分别为模板类和模板函数,一个模板可以实例化为各种数据类型(types)的实例类或者函数,无需为每一种类型分别写一份代码,作为通用的模具,大大提高了复用性,编译器将模板编译的过程类似于宏替换过程,由于编译器不会直接编译模板本身,所以模板的定义通常放在头文件中。cout

2023-12-18 16:14:25 1253 1

原创 git Bash的用法

在初始化本地仓库的时候,Git默认已经帮我们创建了一个名字叫做master的分支,称为主分支。作用是用来保存和记录整个项目已完成的功能代码,因此不允许程序员直接在master分支上修改代码,容易导致整个项目奔溃,因此需要在自己负责开发的分支上进行开发。由于编程人员不能直接再master分支上进行功能开发,所以就有了功能分支的概念,指的是专门用来开发新功能的分支,它是临时从master分支上分叉出来的,当新功能开发且测试完毕后,再合并到master分支上。项目成员可以建立自己的分支,便于之后代码的合并。

2023-12-13 15:27:30 90 1

原创 windows cmake:用cmake项目生成visual studio的资源管理器

1、ctl+r,输入cmd并回车,打开命令提示符窗口,cd进入项目根目录,并创建一个build文件夹。此时就可以看到cmake支持的编译器(generator)了,不符合则需要下载其他版本的cmake。首先确定cmake的版本是否支持当前visual studio的编译器(generator)mkdir是创建文件夹命令,cd是切换目录(路径)命令。结果:生成了后缀为.sln的文件,双击就可以打开项目了。".."表示上一层目录,"."表示当前目录。2、执行cmake命令。

2023-12-01 17:32:39 76 1

原创 C/C++ typedef和#define的区别

typedef和#define都是替对象去一个别名。

2023-11-29 11:19:11 25 1

原创 cmake命令行编译,遇到问题:cl.exe - broken Hostx64/x64/cl.exe is not able to compile a simple test program

环境变量新建LIB变量,输入一下变量的值,若只有一条输入框,用;环境变量新建INCLUDE变量,输入一下变量的值。环境变量PATH增加以下路径。系统找不到指定的文件。

2023-11-28 10:37:58 465 1

原创 win10 cmake:使用测试工具时,调试动态链接库

在CMakeListst.txt文件中添加测试工具的可执行文件目录为所测试项目的动态链接库(dll)的输出目录,可以使用message(STATUS ${PROJECT_SOURCE_DIR})打印路径含义。接着编辑工作目录,添加添加测试工具的可执行文件所在目录,点击确定,直到回到代码界面。上边工具栏点击项目(或者在右侧的文件栏右键项目)->项目属性->配置属性->调试。在VS点击运行(或F5)即可开始断点调试。输入添加测试工具的可执行文件入口的路径。启动程序入口设置为测试工具的执行入口。

2023-11-24 11:45:01 74 1

原创 C++ stringstream

当我们需要在程序中使用字符串和数字数据互相转换的时候,可以使用stringstream类。

2023-11-22 17:57:56 60

原创 C++ 回调函数

作为回调函数的函数需要时全局函数或静态函数,因为非静态函数自带一个所属类的this指针,参数列表则会与回调函数的函数指针类型不相符,考虑到全局函数会破坏封装性,所以一般用静态函数,但是C语言没有类,所以只能使用全局函数,并且没有this指针可以传入。相机的回调函数,class A为UI界面,class B为相机SDK,class B的实例作为class A类中的一个变量。场景:class B的实例作为class A类中的一个变量,class B在运行中反而需要调用class A中的变量或者函数。

2023-11-22 16:17:29 29

原创 cmake:静态库与动态库

库的源文件Hello.cpp生成静态库hello_lib# target_include_directories为一个目标(可能是一个库library也可能是可执行文件)添加头文件路径# 指定用哪个源文件生成可执行文件#连接可执行文件和静态库。

2023-11-16 18:02:38 29 1

原创 cmake:根据功能进行文件夹划分

向工程添加多个指定头文件的搜索路径,路径之间用空格分隔#使用aux_source_directory把当前目录下的源文件存列表存放到变量SRC_LIST里 aux_source_directory (demo1 SRC_LIST1)include_directoris:向工程添加多个指定头文件的搜索路径,路径之间用空格间隔如果没有使用include_directoris(),则需要用以下方式引用头文件。

2023-11-16 14:12:46 106

原创 cmake:同个目录下,多个源文件构建

aux_source_directory()存在弊端,加入的源文件中可能存在不需要的源文件,则可以使用set()函数去新建变量存放需要的源文件。# 把当前目录下的源文件列表存放到变量SOURCES里(.表示当前目录)# 这种方式过于麻烦。

2023-11-16 10:18:04 89 1

原创 一个简单的cmake项目

创建一个构建文件夹,可以位于文件系统上的任意位置,所有的临时构建和目标文件都位于此目录中,保持文件结构的简洁合理清晰。add_executable()函数的第一个参数是要生成的可执行文件的名称,第二个参数是要编译的源文件的列表。project()函数将会创建一个值为demo的变量${PROJECT_NAME},demo是变量的值。# 表示最终要生成的exe可执行文件的名字叫demo,使用的源文件是main.c。构建可执行文件,第一个参数是可执行文件名,第二个参数是要编译的源文件列表。

2023-11-15 17:16:53 21

原创 清空数组的方式

字符数组以‘/0’结尾,需要占用空间,所以开辟空间时需要多开辟一个字符大小。第四种(适合字符数组)

2023-08-14 17:30:40 24

空空如也

空空如也

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

TA关注的人

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