
C/C++开发
文章平均质量分 82
主要介绍C/C++的一些知识
大草原的小灰灰
消灭了一个bug,还会有千千万万个bug。bug是改不完的。
展开
-
C/C++回调函数实现与std::function和std::bind介绍
回调函数是一种编程模式,指的是将一个函数作为参数传递给另一个函数,并在某个特定事件发生时或满足某些条件时由该函数调用。这种机制允许你定义在特定事件发生时应执行的代码,从而实现更灵活和模块化的程序设计。原创 2025-03-29 10:35:37 · 1057 阅读 · 0 评论 -
右值引用、移动语义std::move和完美转发std::forward
左值是指那些具有持久存储位置的表达式。右值是指那些没有持久存储位置的临时表达式,通常表示的是临时值或即将被销毁的对象。原创 2025-03-27 09:00:00 · 507 阅读 · 0 评论 -
C++ STL之函数对象
重载函数通用操作符的类,其对象常称为函数对象。函数对象使用重载的()运算符,行为类似函数调用,也叫仿函数。原创 2025-02-08 08:30:00 · 806 阅读 · 0 评论 -
C++ STL之算法介绍
STL提供了大量的算法,用于对容器中的元素进行各种操作,包括排序、搜索、复制、移动、变换等。这些算法在使用时不需要关心容器的具体类型,只需要指定要操作的范围即可。原创 2025-01-16 21:18:52 · 886 阅读 · 0 评论 -
C++ STL之容器介绍(vector、list、set、map)
STL(Standard Template Library)即标准模板库。STL通过使用模板实现了容器和算法的分离,允许程序员编写与类型无关的代码,这正是泛型编程的核心思想。原创 2025-01-12 11:46:10 · 1334 阅读 · 0 评论 -
C++四种类型转换操作符 static_cast、dynamic_cast、reinterpret_cast、const_cast介绍
C风格的强制类型转换很简单,都可以使用Type b = (Type)a形式转换。但这种方式存在一些缺点,比如信息丢失或精度损失,代码可读性的下降等。因此C++提供了四种类型转换符来应对不同场合。分别是static_cast、dynamic_cast、reinterpret_cast、const_cast。原创 2024-11-23 18:35:52 · 1398 阅读 · 0 评论 -
C++11语法之Lambda表达式介绍
Lambda表示匿名函数,属于可调用对象,特点是就地定义就地使用。简单理解就是没有名称的函数。在任何需要可调用对象的接口,都可以传入一个lambda表达式。原创 2024-11-18 09:43:41 · 467 阅读 · 0 评论 -
C++ 多线程std::thread以及条件变量和互斥量的使用
本文章主要介绍C++11语法中std::thread的使用,以及条件变量和互斥量的使用。原创 2024-11-16 18:18:01 · 1147 阅读 · 0 评论 -
C++智能指针 shared_ptr 和 unique_ptr
传统C/C++编程中,使用new或者malloc动态申请内存后,必须手动调用delete或者free去释放,否则就会造成内存泄漏。在C++ 11语法中,提供了智能指针来管理内存,开发者不必再关心内存的释放问题,智能指针可以自动去释放管理的内存空间。原创 2024-11-10 11:53:16 · 1107 阅读 · 0 评论 -
C/C++二维码生成库qrencode编译与使用
qrencode 是一个用于生成 QR 码(Quick Response Code)的工具和库。QR 码是一种矩阵条形码或二维条形码,能够在水平和垂直方向上存储信息。qrencode 支持多种编码方式,并能够生成不同复杂度和错误校正级别的 QR 码。原创 2024-08-31 13:17:22 · 2546 阅读 · 0 评论 -
使用OpenCppCoverage统计代码覆盖率
OpenCppCoverage 是一款专为Windows平台设计的开源C++代码覆盖率统计工具。原创 2024-07-20 09:49:34 · 1749 阅读 · 0 评论 -
使用RapidJson开源库解析和生成Json数据
RapidJSON是一个高效、轻量级的 C++ JSON 解析器及生成器库,由腾讯公司开源。RapidJSON 是只有头文件的 C++ 库。只需把 include/rapidjson 目录复制到项目中即可使用。原创 2024-05-12 12:01:58 · 1510 阅读 · 0 评论 -
通过C++开源库TinyXML2解析和生成XML数据
TinyXML2是一个轻量级的、开源的C++库,专门用于解析和生成XML文档。它是原始TinyXML库的一个升级版本,设计得更为高效和强大,同时保持了简单易用的特点。TinyXML2非常适合那些需要处理XML数据,而又希望保持代码简洁和执行效率的应用场景。原创 2024-04-27 13:01:02 · 1939 阅读 · 0 评论 -
C++ UML 类图介绍与设计
UML(Unified Modeling Language),即统一建模语言,是用来设计软件的可视化建模语言。它的特点是简单、统一、图形化、能表达软件设计中的动态与静态信息。原创 2024-04-14 17:23:33 · 2547 阅读 · 0 评论 -
使用c语言libexpat开源库解析XML数据
Expat 是一个用 C 语言编写的开源 XML 解析库,以其高性能和小巧的体积著称。Expat 兼容多种操作系统平台,包括但不限于 Windows、Linux、macOS 等。由于其跨平台特性和简单易用的API,Expat 成为了许多C/C++程序员解析XML文档的首选工具之一。原创 2024-04-04 09:54:36 · 2101 阅读 · 0 评论 -
C++高性能日志库spdlog使用指南
Spdlog 专注于提供极致的性能,在大量日志记录场景下也能保持较低的延迟和较高的吞吐量。原创 2024-02-28 16:48:10 · 19743 阅读 · 7 评论 -
C++日志库plog使用指南
plog是一个轻量级、跨平台的C++日志库,它设计简洁且易于使用原创 2024-02-22 21:07:39 · 3496 阅读 · 1 评论 -
轻量级c语言开源日志库log.c介绍 - 实现不同级别和参数化日志打印
c语言没有现成的日志库,如果要记录日志,需要自己封装一个日志库。如果要实现日志级别区别和参数打印,还是比较麻烦的,正好在github找到了一个c语言开源日志库,可以实现日志级别打印,参数打印,而且还会记录日期和行号,最重要的是代码非常少,只有100多行,可以直接包含在我们自己的工程代码中,不需要任何依赖。原创 2023-09-18 19:07:42 · 8658 阅读 · 0 评论 -
使用WinDbg进行动态调试
本文章主要介绍如何使用WinDbg进行动态调试。如果程序崩溃后,没有记录dump文件,或者程序启动时发生异常,比如常见的 应用程序无法正常启动(0xc000007b) 报错,都可以使用WinDbg动态调试功能来定位问题。文章最后,对WinDbg常用命令进行了总结。原创 2023-09-09 13:08:25 · 1481 阅读 · 0 评论 -
Dump文件的生成以及使用WinDbg静态分析
本文章主要介绍了如何生成Dump文件,包括两种方式,通过代码生成和通过注册表生成。并且介绍了WinDbg工具的下载和使用,以及如何使用WinDbg工具去静态分析Dump文件,从而找到程序的崩溃位置。原创 2023-09-03 00:03:06 · 1016 阅读 · 0 评论 -
不同系统和架构下的宏定义名称
C/C++代码实现跨平台编译时,基本上都会调用系统函数,这个时候就可以使用不同系统下的宏定义来实现跨平台的编译。系统主要分为windows,linux和mac。架构主要指的是linux下的架构,常用的有x86,arm和mips架构。原创 2023-07-26 20:31:00 · 1999 阅读 · 0 评论 -
静态链接和动态链接 -- 静态加载(隐式调用)和动态加载(显式调用)
静态链接 : 由链接器在链接时将库的内容加入到可执行程序中,这里的库是静态库,Windos下是*.lib后缀,Linux下是*.a后缀。动态链接 : 可执行程序加载时(静态加载) 或者 运行时(动态加载),将库文件中的内容加入到可执行程序中,这里的库是动态库,Windows下是*.dll后缀,Linux下是*.so后缀。原创 2023-06-17 18:26:43 · 1129 阅读 · 0 评论 -
C++字符串类std::string介绍
C++字符串类std::string介绍。原创 2022-07-16 12:44:58 · 7455 阅读 · 1 评论 -
图解快速排序
快速排序被誉为二十世纪十大算法之一,重要性不言而喻。思想: 1、先从数列中取出一个数作为基准数 2、将比基准数小的放到前面,比基准数大的放到右边(从小到大排序)。 3、再对左右区间重复第二步,直到各区间只有一个数。图解:我们对如下几个数从小到大进行排序第一步:选取基准数我们选择18为基准数,选择的位置记为坑。然后让i指向坑的位置,j指向最后一个元素。第二步:移动i和j,i向后移动,j向前移动。移动规则是遇到坑...原创 2021-09-11 11:26:01 · 371 阅读 · 0 评论 -
visual studio 2015 无法卸载(安装时发生严重错误)
找到安装包的这个目录 vs2015\vs2015.ent_enu\packages\communitycore\Setup。原创 2022-11-30 20:57:03 · 6313 阅读 · 2 评论 -
vector中reserve与resize的区别
搞清楚这两个区别之前,先要搞清楚vector的原理和size与capacity的区别,可参考我写的另一篇文章。 reserve是容器预留空间,但在空间里不真正创建对象。也就是capacity。 resize是改变容器大小,且创建元素。也就是size。 std::vector<int> v1; v1.reserve(10); std::cout <<"v1.size = "<<v1.size() <<...原创 2021-11-20 20:16:05 · 2161 阅读 · 0 评论 -
shell脚本介绍
【代码】shell脚本介绍。原创 2022-10-29 22:00:49 · 6826 阅读 · 0 评论 -
C++ json库介绍 - json11的使用
本文章主要介绍下json11库的使用json11: json11是一个轻量级的C++11库, 提供JSON的序列化和反序列化功能。使用时只需要在我们的工程中引入头文件json11.hpp和源文件json11.cpp即可使用。原创 2023-01-01 12:55:38 · 3941 阅读 · 0 评论 -
vector容器中size与capacity的区别
理解这两个方法的区别之前,需要先搞清楚vector的原理。vector底层是一个动态数组,插入元素时会申请新的空间,但考虑到效率问题,并不是每插入一个元素,就申请一个空间,而是事先先申请好一段空间,开始插入元素,当空间不足时,再重新申请一块更大的空间。并将原来空间中的数组拷贝到新空间中,再继续插入元素。 而size就是vector中元素的个数,而capacity就是vector申请的内存空间的大小。 std::vector<int> v1; for (i...原创 2021-11-20 19:43:13 · 5135 阅读 · 0 评论 -
指针数组与数组指针
指针数组 : 是一个数组,其中每一个元素是指针。int a1 = 10, a2 = 20;//定义一个指针数组 int *arr[2] = {0};//它的元素arr[0],arr[1]就是一个指针,可以指向整型变量arr[0] = &a1;arr[1] = &a2;//可以直接打印出它指向位置的值printf("*arr[0] = %d\n", *arr[0]);printf("*arr[1] = %d\n", *arr[1]);便于理解写一个普通指针作对.原创 2021-09-05 12:07:49 · 657 阅读 · 0 评论 -
c++泛型编程之函数模板与类模板
C++泛型编程(Generic Programming)是一种编程范式,它允许你编写与类型无关的代码,这些代码可以在不改变的情况下被多种类型使用。这种类型的编程主要通过模板(Templates)机制来实现。原创 2022-11-12 18:17:33 · 1286 阅读 · 0 评论 -
c语言json库parson的介绍和使用
parson是用C语言开发的一个json解析库, 提供json的序列化和反序列化功能。使用时只需要在我们的工程中引入头文件parson.h和源文件parson.c即可使用。原创 2023-01-06 14:23:04 · 2526 阅读 · 1 评论 -
C++三大特性之多态
多态性是面向对象程序设计的重要特性。利用多态性可以设计和实现一个易于扩展的系统。在C++中,多态性是指具有不同功能的函数用同一个函数名,即用同一函数名调用不同内容的函数。原创 2022-12-11 11:21:45 · 908 阅读 · 0 评论