C++经验
qq_1410888563
这个作者很懒,什么都没留下…
展开
-
typedef定义函数指针
typedef void (*名称)(int xx)声明的函数名称在返回值和参数表中间。原创 2024-09-16 16:20:12 · 105 阅读 · 0 评论 -
框架设计MVVM
2.view包含viewmodel,通过驱动viewmodel去控制model的数据和业务逻辑。1.viewmodel 包含model。原创 2024-07-16 22:56:44 · 211 阅读 · 0 评论 -
框架设计MVP
3.view包含presenter,view通过presenter反向处理逻辑。2.和MVP不同的是View和Model之间不进行交互。1.presenter里面包含view和model。原创 2024-07-16 22:25:07 · 395 阅读 · 0 评论 -
框架设计MVC
1.用户通过界面操作,传输到control,control可以直接去处理View,或者通过模型处理业务逻辑,然后将数据传输给view。2.control包含了model和view成员。原创 2024-07-16 21:43:57 · 516 阅读 · 0 评论 -
pugixml C++ 开发者处理 XML 数据的理想选择之一
pugixml 以其高效、易用、全面的功能和良好的跨平台能力成为 C++ 开发者处理 XML 数据的理想选择之一。原创 2024-04-12 17:45:23 · 418 阅读 · 0 评论 -
C++ 检测文本文件编码格式
3.检查ANSI = 0,Unicode= 1,UTF8,3.检查是否是UTF8格式。原创 2024-04-12 17:37:53 · 519 阅读 · 0 评论 -
C++ linked_hash_map按顺序保存的容器
HashMap中不存在保存顺序的机制。而在LinkedHashMap中可以保持两种顺序,分别是插入顺序和访问顺序,这个是可以在LinkedHashMap的初始化方法中进行指定的。相对于访问顺序,按照插入顺序进行编排被使用到的场景更多一些,所以默认是按照插入顺序进行编排。链接:(没心情看原理,直接使用)原创 2024-04-10 17:18:57 · 441 阅读 · 0 评论 -
动态库和静态库的新理解
1.静态库中包含的是全部的源码信息,而动态库dll里面包含的是所需要的部分源码信息。2.静态库是将被调用的函数和数据复制一份到所使用的模块,而动态库只需要实现一次就行。比如两个模块使用了静态库里面的函数,这两个模块都需要复制两份内容到使用的模块内。2.一个项目要引用另一个项目可以直接使用lib库,并不需要导出,但需要类的头文件。导出要调用的类和函数,然后在要使用的项目附加依赖性,再附加上那些类和函数的头文件位置。静态库和导入库是两个概念,一个是传统意义上的静态库,另一个是配合dll使用的导入库。原创 2024-03-16 15:10:44 · 391 阅读 · 0 评论 -
断点调试野指针判断方法
1.当出现指针变量无法读取内存时候,则表示当前指针对象早就被析构,现在的指针即是一个野指针。原创 2024-01-24 12:38:08 · 459 阅读 · 0 评论 -
C++11 委派构造用法
(1)如果继承它的子类构造不需要参数,则它直接继承基类的构造,节省代码空间。(2)如果没有代码使用基类的构造函数,它不就会产生多余的代码。如果继承的基类的构造函数有自身的参数,这就不太适用。1.委派构造优势在于。原创 2023-12-20 11:52:34 · 402 阅读 · 0 评论 -
模板调用类中函数方法
【代码】模板调用类中函数方法。原创 2023-12-14 20:31:52 · 126 阅读 · 0 评论 -
类做结构体的利与弊
在C++中,类和结构体都可以用来定义自定义数据类型,它们的基本语法非常相似。实际上,在C++中,主要的区别在于默认的成员访问权限(在类中默认为私有,而在结构体中默认为公共)。因此,你可以使用类来模拟结构体,反之亦然。然而,使用类或结构体取决于你的设计需求和风格偏好。原创 2023-11-14 11:20:07 · 209 阅读 · 0 评论 -
function函数指针和lamada的[&]和[=]注意事项
lamda传入引用&,导致作用域消失,最终报错。1.function对象存储函数指针。2.lamada表达式&和=捕捉的方式。在工作的过程中,lamda表达式的。lamda传入赋值=,正确反馈。原创 2023-10-30 20:31:48 · 152 阅读 · 0 评论 -
C++ 委托妙用
1.利用观察者,注册需要处理的用户(Test)(右值处理方法也是妙处)2.用户自身采用模板去调用观察者的类(方法甚妙)原创 2023-10-27 10:44:57 · 129 阅读 · 0 评论 -
C++17递归锁recursive_mutex
2.递归锁允许同一线程在已经获得锁的情况下再次获得锁,这对于递归函数或嵌套函数非常有用。不过,要小心使用递归锁,以避免死锁和性能问题。通常,只有在确实需要在递归调用中再次获得锁时才使用递归锁。来创建递归锁(recursive lock),它是C++标准库提供的一种多线程同步机制。递归锁允许同一线程多次获得锁,而不会造成死锁。原创 2023-10-20 16:44:28 · 311 阅读 · 0 评论 -
static设置变量的使用方法
1.长时间不使用static会忘记,记录一下,static变量的设置使用。原创 2023-10-20 15:39:46 · 148 阅读 · 0 评论 -
变量承接函数类型的方法
采用函数模板:类具有相同的函数。1.当两个类没有共同基类。2.当两个类有共同基类。原创 2023-10-10 11:52:30 · 69 阅读 · 0 评论 -
管理器注册类方法和调用类函数方法
一:定义结构体和基类。原创 2023-10-09 23:49:35 · 236 阅读 · 0 评论 -
__VA_ARGS__的作用和用法
是C/C++中的一个宏,用于在宏定义中表示可变数量的参数(variadic arguments)。它通常与宏函数(函数式宏)一起使用,以便可以在宏中处理不定数量的参数。是一个强大的特性,它允许你创建具有可变数量参数的宏,以实现各种不同的功能,如条件性地打印日志、生成代码等。但要小心使用,确保不会导致宏展开时的意外行为。表示所有传递给宏的参数,可以是零个或多个参数。来接受可变数量的参数,并将它们打印到标准输出流。和宏定义的...(参数列表)配套使用。原创 2023-10-09 15:16:48 · 3016 阅读 · 0 评论 -
命令空间定义的流程和使用方法
1.命名空间对于项目很庞大的时候,起到很重要的作用,它可以明确表示目前正在使用的函数和类所属的定义,不会发生歧义。2.尽量使用命名空间,保证代码的规范性。原创 2023-10-07 10:18:15 · 77 阅读 · 0 评论 -
MVVM模式理解
2.利用一个中间商进行数据的处理,所有的数据通过中间商进行处理。1.将展示的界面窗口和创建的构件是数据进行分离。原创 2023-09-20 11:50:24 · 99 阅读 · 0 评论 -
C++ 基础类型不要用const &
1.对于bool,int 基础类型,如果加一个const会导致编译器需要去判断标志位,对于编译器来说,简单的类型消耗的资源忽略不计。2.另外一个代码的读性原因。原创 2023-08-26 11:39:40 · 135 阅读 · 0 评论 -
C++标准转换运算符reinterpret_cast
2 .变量为值的用法,变量为指针的用法。将变量转化为指针,取指针地址去做转化,指针只有8个bit,无论怎么转化都不会超出范围。而自定义的变量内存很大,如果转化的类型内存很小,就会出现类似截取内存范围不够,导致取出的变量会失去部分信息。链接中很多讲的深度很深,原理很晦涩难懂,对于应用来说,知道如何运用即可,想深入了解得去研究。1.简单理解就是类似union,将一段类型内存A往另一段类型内存B里面塞,不管内容是什么,然后再转成原来内存,如果内存b的范围没有内容A的大,就会出现截取部分信息的问题。原创 2023-08-07 10:59:31 · 205 阅读 · 0 评论 -
智能指针shared_ptr:自定义删除器
2.智能指针创建的时候,第二个参数是自定义删除器,默认情况下,shared_ptr调用delete()函数。如果要保住这个变量,需要对构造智能指针的时候进行处理。(调用智能指针的第二个参数进行处理)1.普通指针转化成智能指针。原创 2023-08-05 17:26:58 · 692 阅读 · 0 评论 -
C++17 [[nodiscard]]的使用和见解
1.nodiscard是c++17引入的一种标记符,其语法一般为[[nodiscard]]或[[nodiscard("string")]](c++20引入)。nodiscard一般用于标记函数的返回值或者某个类,当返回值未被使用时,编译器会发出相关warning。2.个人见解,这个是没用的一个标记,只会使编译器发出更多的警告,因为放弃返回值是程序员知道不需要返回值,而不是忘记使用。一旦添加,如果有些返回值就是没用处,会使得编译器爆出太多的警告。原创 2023-08-04 14:23:26 · 960 阅读 · 0 评论 -
多类有相同功能设计技巧和见解(组合大于继承)
3.少用多继承,多用组合,将功能类做成普通类的变量,好处在于:需要什么功能,添加什么功能。继承是所有父类的东西都得继承,这就增加一些无用的东西。2.如果要存储数据,将类设计成单例,只是执行的函数,设计成static函数。1.当两个类有多个相同的函数时,应该将函数提取出来。做成基类或者公共类。组合大于继承(方法二改进)原创 2023-07-05 10:11:45 · 177 阅读 · 0 评论 -
前置声明、源文件include、编译链接顺序问题
2.继承或者普通变量在头文件使用的时候(除非所有的编译顺序都正确,才能在源文件include),最好不要在源文件include,除非大型工具库(依赖顺序非常清晰)。TestB.h (继承,普通变量(最好用指针替代,防止内存爆炸))1.前置声明用在指针变量使用,无需在头文件或源文件include。TestB.h (前置声明,无需在源文件include)TestC.h(继承编译顺序,include顺序)顺序不正确会导致未定义基类。原创 2023-07-04 17:01:16 · 179 阅读 · 0 评论 -
C++:reinterpret_cast用法和__int64(DWORD_PTR)用法
1.reinterpret_cast用法。2.DWORD_PTR用法。原创 2023-06-15 17:30:51 · 182 阅读 · 0 评论 -
C++类设计之菱形继承模式(瞎起名称)
1.当类A和类B有共同的函数,通过设计一个虚基类,让类A和类B继承,A和B分别写自身功能的虚函数。2.写一个模板继承类,通过模板继承类里面去实现虚基类的方法。3.子类分别通过模板继承类,去实现类A和类B的虚函数。2.继承类A和类B不用去实现相同的虚函数。1.类A和类B不用写相同的虚函数。原创 2023-05-24 17:59:42 · 82 阅读 · 0 评论 -
C++ : 整体工程构架设计流程
1.一个项目通常分为bin(存放项目生成的dll和整体工程的exe),code(存每个项目的代码),lib(存每个项目生成的lib),pdb(存放项目生成的pdb文件),sln(解决方案)一个主干项目,其他若干依赖的库。以本工程为例,创建一个NewTest主干项目,两个动态库项目ATest、BTest。步骤二:创建A、B动态库项目,创建的位置放在code文件夹下。步骤三:处理A、B、主项目的属性信息。设置pdb的输出位置,在pdb下。步骤一:创建NewTest项目。2.B\主项目依赖设置。原创 2023-04-13 10:04:11 · 1197 阅读 · 0 评论 -
C++:序列化和反序列化知识和代码
它在此过程中,先将对象的公共字段和私有字段以及类的名称(包含类所在的程序集)转换为字节流,然后再把字节流写入数据流。basic_binary、basic_text、basic_xml、binary_oarchive、polymorphic_iarchive、text_iarchive、xml_iarchive这几种。可用于数据序列化与反序列化。(2)Boost.Serialization能够创建或重建程序中的等效结构,并保存为二进制数据、文本数据、XML或者实用户自己定义的其它文件。原创 2023-04-02 16:43:02 · 882 阅读 · 0 评论 -
动态库和exe直接的关系
3.当exe和dll不在同一个目录,这时候需要进行loadmoudle去加载动态库,才能调用动态库程序。2.通常编译一个代码,exe所需要的dll在同一个目录下,程序能运行起来。1.首先vs会去加载电脑的环境变量,将所有配置好的环境加载到当前环境中。2.当环境中没有设置变量,则需要自己在属性的环境中去手动添加。相当于在系统环境变量中添加这个变量(但只针对这个项目)4.或者通过去设置动态库的路径保证程序的正确运行。1.编译时候需要lib库,运行时候需要dll。vs设置动态库的路径。原创 2023-02-07 18:09:02 · 308 阅读 · 0 评论 -
C++: decay关键字的作用
1.C++11提供了一个模板类std::decay,移除类型中的一些特性,比如引用、常量、volatile,但是不包括指针特性。原创 2023-01-07 18:41:32 · 358 阅读 · 0 评论 -
C++:std::ref和std::cref的作用
2.ref和cref并不是真正的将参数以引用的形式传递,因为地址发生变化。1.使用场景:(1)在多线程中使用 (2)在bind绑定中使用。原创 2023-01-03 10:23:15 · 351 阅读 · 0 评论 -
tinyxml2存储xml数据简单高效
重点:git地址:https://github.com/leethomason/tinyxml2tinyxml2的安装非常简单,从git下载,一共只需要两个文件tinyxml2.h和tinyxml2.cpp。而且tingxml2和C++版本无关,不依赖于STL和RTTI。所有任何版本的C++都能使用。如果要存储下拉格式的数据一:创建xml文件。原创 2022-12-29 10:33:56 · 542 阅读 · 0 评论 -
CString、int、double互转
int 转 CstringCstring转 int1.int 转 Cstringint num= 123;CString msg;msg.Format(_T("%d"), num);2.Cstring转 intCString msg =_T("123");int num= _ttoi(msg );double 转 CstringCstring转 double1.double 转 Cstringdouble num= 123;CString msg;msg.Format(_T("%lf"), num);2.C原创 2022-12-10 10:22:05 · 940 阅读 · 0 评论 -
C++:过滤中文字符
1.主要用到ASCII的范围。原创 2022-11-30 15:02:26 · 410 阅读 · 0 评论 -
C++:什么时候使用move
1.简单类型的move赋值是无意义的,还增加了代码的长度。1.move可以随便用,但是有些move是没意义的。(1) 避免无意义的大规模拷贝 用移动。2:这样对于数组对象使用是有意义的。(2) 包含不可复制的数据 用移动。比如对象里面new了很大的对象。2.move使用的场景是。原创 2022-11-24 18:03:06 · 524 阅读 · 0 评论 -
C++:全角和半角转化
转载: 转载: 重点:原创 2022-11-22 15:19:51 · 1157 阅读 · 0 评论 -
C++:项目相互依赖调用解决方法两种方法
Bmodel依赖于Amodel,但是Amodel又需要BModel的信息。原来是在Amodel创建一块内存,在Bmodel中将内存地址赋给这块内存,然后在Amodel去做其他操作。原创 2022-11-21 21:35:08 · 1959 阅读 · 0 评论