
C++编程实战大杂烩
文章平均质量分 85
C++的设备驱动能力和性能 + web框架的渲染与业务能力可以构架出更有效率的软件
本专栏会提到下面内容:
1. C++的基本内容,这是基础。包括标准库,windows的SDK等。
2. 通用的web级C++框架,如CEF,Electron等
3. 兼容C++的服务,如nodejs等。
优惠券已抵扣
余额抵扣
还需支付
¥49.90
¥99.00
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅专栏,享有专栏所有文章阅读权限。
本专栏为虚拟商品,基于网络商品和虚拟商品的性质和特征,专栏一经购买无正当理由不予退款,不支持升级,敬请谅解。
新兴AI民工
人工智能行业的新兴民工
展开
-
C++ DLL导出时变量与函数的区别:IAT导入地址表
DLL编程中的IAT导入地址表原创 2025-03-27 15:32:59 · 156 阅读 · 0 评论 -
嵌入式开发:程序下载(包括ARM和FPGA)
嵌入式开发的范围很广,ARM公司的STM芯片应该算是应用很广的开发内容。ARM一般通过Keil软件来进行开发。用Keil软件编译完成之后,就可以通过下载线下载到ARM芯片的固件中存储起来。原创 2025-01-22 10:44:54 · 216 阅读 · 0 评论 -
C++异步编程之协程
这个函数会返回一个包含promise_type的类,以及这个类的一个句柄std::coroutine_handle<promise_type> coro_handle;所谓的异步编程,主要的问题也是说如何解决好多个线程之间调用先后问题,通过锁机制可以有效的控制多个线程的执行顺序,比如上面文章中提到的生产者-消费者模式。在JS语言中,对于这个异步编程模型有着一个非常通用的编程模型:Promise。在之前的异步编程的文章中,提到过C++中一种非常普遍的异步编程方式:锁机制。通过co_return来结束协程。原创 2025-01-22 10:44:19 · 84 阅读 · 0 评论 -
C++中的左值,右值,拷贝,移动,转发等概念
写C++的人都知道,C++类定义中的构造函数是非常重要的,如果一个类中的成员有指针的话,是需要定义一些不同类型的构造函数来处理这些指针的,不然非常容易出现内存的越界访问和内存泄漏。而右边的值可以是变量,也可以是常量,也就是在执行过程中不发生变化的,在内存中也没有地址(其实是有地址的,一般在常量去,&这个取地址运算符不能做用于这个上面)。简单的理解,赋值运算符的左边的值可以是变量,是可以在执行过程中发生变化的,或者说这个值在内存中是有地址的,可以被取地址操作的。原创 2025-01-02 14:50:17 · 219 阅读 · 0 评论 -
C++代码中数组操作的安全性探讨:基础数组,vector和span
但是这里存在的一个问题就是vector会存在一个内存拷贝的问题,也就是vector和vector内的元素都会重新拷贝一份,如果是类的话,还会执行内存拷贝的构造函数。这样的数组在函数传递的时候,会存在一个数组退化的问题(array decay),也就是退化成了一个指针。在函数参数传递的时候,必须跟一个size的参数过去,否则无法对这个指针进行安全的使用。越界问题我们等下比较vector和span的时候再说,先提一下span的用法,我理解其实就是一个vector的引用!以我自己用的比较多的vector为例。原创 2025-01-02 14:48:56 · 89 阅读 · 0 评论 -
C++代码强制转换之reinterpret_cast
double这个会提示报错。doubledouble输出结果是4.94066e-324,这个可以参考double在各种体系结构中的分解了。从大模型中截取了一段给给位做个参考,这个就不细说了:在x86架构中,double双精度类型数据遵循IEEE 754标准进行存储和表示。根据IEEE 754标准,双精度浮点数由三个主要部分组成:1位符号位(S),11位指数位(E),以及52位尾数位(M)。这种结构使得双精度浮点数能够表示非常大的数值范围和高精度的小数部分。原创 2024-12-23 16:20:15 · 200 阅读 · 0 评论 -
C++代码强制转换之dynamic_cast
dynamic_cast 是 C++ 中用于在运行时进行类型转换的操作符,主要用于处理多态类型(即包含虚函数的类)。它允许将基类指针或引用安全地转换为派生类指针或引用。如果转换失败,dynamic_cast 会返回 nullptr(对于指针)或抛出 std::bad_cast 异常(对于引用)。原创 2024-12-23 16:19:30 · 105 阅读 · 0 评论 -
C++利用多态对工厂模式的一种实现
这种模式是可以实现根据不同的传入参数实现不同的类的创建,但是稍显不优雅。原创 2024-12-20 16:21:21 · 204 阅读 · 0 评论 -
C++代码强制转换之static_cast
static_cast用于基本数据类型转换、指针和引用的转换以及类层次结构中的上行和下行转换。static_cast 是编译器内置的功能,是在编译时进行的,没有运行时开销,也就是编译链接后就直接形成了汇编代码。其实现细节通常不在标准库的源码中,而是直接嵌入到编译器的代码生成部分。static_cast会做一些类型检查,比如指针的转换,基本类型的指针转换是无法通过static_cast来做转换的完全不相干类之间也无法通过static_cast来做转换。原创 2024-12-20 16:19:01 · 83 阅读 · 0 评论 -
C++类中const变量的使用过程中的一些注意事项
const变量是C++代码中一个比较常用的关键字,比起定义一个宏,const修饰的变量可以让编译器做一些类型检查等工作,能比较好的保证代码的稳定性和可靠性。但是这个const用起来,有时候也有点小坑。原创 2024-12-16 09:25:14 · 87 阅读 · 0 评论 -
C++的虚表:重载逻辑详解
C++的虚表结构与逻辑是实现面向对象编程的基石之一,虽然是一个比较老的话题,也必须拿出来再整理一遍。结构大概是这样的:下面所有的代码都是在Visual Studio下调试的,VS的图形界面调试还是比linux下要舒服的多。原创 2024-12-16 09:24:26 · 197 阅读 · 0 评论 -
【技术点】数据结构--二叉树之红黑树(三)
文章目录前言红黑树为什么要有红黑树前言前面两篇文章:【技术点】数据结构–二叉树(一)【技术点】数据结构–二叉树(二)讲了普通二叉树然后再到平衡搜索二叉树(BBST,Balance Binary Search Tree,又称AVL树)。这一篇来讲讲更厉害(也就是更复杂)的一种树:红黑树(RBTree, Red Black Tree)。红黑树为什么要有红黑树前面讲到的AVL树在搜索性能上已经达到了二分查找的性能:O(lgn)。在插入时的性能也是最多两次旋转就可以调整完成,所以插入性能是 O(原创 2020-07-05 09:13:05 · 28676 阅读 · 0 评论 -
【技术点】数据结构--二叉树(一)
文章目录前言基本二叉树二叉树定义二叉树遍历满二叉树 & 完全二叉树BST - 搜索二叉树搜索新增节点删除前言二叉树,数据结构的终结者,面试官的最爱。BST,红黑树,完全二叉树各种概念很容易就傻傻分不清楚。以前了解的东西都很散,写个文章将这些东西记录清楚。基本二叉树二叉树定义二叉树是n个有限元素的集合,该集合或者为空、或者由一个称为根(root)的元素及两个不相交的、被分别称为左子树和右子树的二叉树组成,是一个递归的概念。二叉树遍历深度优先搜索广度优先搜索应该说,树这种数据结原创 2020-06-28 22:48:14 · 32836 阅读 · 0 评论 -
【技术点】数据结构(六) -- 哈希表
文章目录简介哈希函数直接寻址法取模法其他冲突的处理链地址法开放地址法其他实例JAVA中的哈希表Entry对象 & 哈希映射方法映射计算方法冲突解决办法 - HashMap存储结构扩容总结简介 前面几篇已经讲了树这种数据结构,分几篇文章列举了常见的几种数据结构:二叉树、红黑树、B树、B+树等。这些数据用于查询的平均新能都是 O(n)。有没有更快的呢?答案是有的,有一种数据结构在理论上的查询性能是O(1),也就是一个常量,这就是我们今天要讲的散列表(或者称哈希表)。 哈希表实际上由两个部分组成原创 2020-07-25 15:11:21 · 13261 阅读 · 0 评论 -
【技术点】数据结构--二叉树(二)
文章目录前言前言接上面一篇文章:【技术点】数据结构–二叉树(一)这次讲点更厉害的树:平衡二叉树(AVL)和红黑树原创 2020-06-30 17:23:56 · 32051 阅读 · 0 评论 -
【技术点】数据结构(七) -- 图(数据结构系列终结篇)
文章目录引言图的若干概念图的定义图的几种典型类型无向图有向图加权图完全图顶点 & 边互相之间的各种关系邻接出度 & 入度路径 & 环等一堆和路径相关的概念图的存储邻接矩阵邻接链表十字链表图的遍历广度优先 - BFS深度优先 - DFS关于图的一些算法Dijkstra算法(节点之间的最短算法)算法过程描述实现代码最小生成树算法:prime算法算法过程描述实现代码总结引言 作为一个到35岁需要转行成为快递小哥的程序员,必须先了解一下快递小哥这一行业。当一个快递小哥拿到很多个快递的时原创 2020-07-31 16:36:51 · 9012 阅读 · 0 评论 -
【技术点】计算机基础算法——排序 & 搜索 & 字符串匹配
文章目录前言排序搜索搜索模式匹配朴素模式匹配KMP算法核心逻辑预处理过程KMP代码:前言 之前写过一个数据结构的专栏: 在专栏里介绍了一些常用的数据结构及其操作。现在想着把一些常用的算法也罗列出来讲一讲,总结一下。这里的算法和现在的AI算法是两码事,我个人的简单理解是计算机科学中的一些经典算法,如排序,搜索等。在整个计算机的处理过程中,大量的操作都可以抽象为排序和搜索。所以了解这两中基本算法类是非常有必要的。排序 我们收集到的数据往往都是无序和杂乱的,在做数据清理和数据整理的时候,最常用的操原创 2020-12-04 12:48:21 · 338 阅读 · 0 评论 -
【技术点】数据结构--B树系列(四)
文章目录前言B树/B-树树结构中的度前言前几篇文章讲常用的二叉树结构都讲完了。传送门:【技术点】数据结构–二叉树(一)【技术点】数据结构–二叉树(二)【技术点】数据结构–二叉树之红黑树(三)在树这种大的数据结构中,除了二叉树,还有几种树是在实际中应用的较多的,比如这篇文章想将的B树系列(B树/B-树/B+树/B*树)B树/B-树首先,这两个树就是同一个东西,只是在翻译的过程中,将“B-Tree”这个专业词汇中间的那根杠杠怎么理解的问题,忽略那根杠杠,就是B树;不忽略就是B-树。树结构中的原创 2020-07-11 23:11:20 · 23184 阅读 · 0 评论 -
【技术点】数据结构--B树系列之B+树(五)
文章目录前言B+树的结构Key & Data叶子节点保存数据:减少I/O的设计中间节点的索引作用链表的作用:范围查询前言前面几篇写完了B树:【技术点】数据结构–B树系列(四)这一篇来讲讲B+树,B+树一般是用于索引:数据库索引、文件系统索引等等。那我们来看看两个问题:B+树和B树的区别?有了B树为什么还要B+树?从第一个问题引申出来,为什么B+树很适合用于索引?B+树的结构借用百度百科上的定义:B+树是B树的一种变形形式,B+树上的叶子结点存储关键字以及相应记录的地址,叶子结原创 2020-07-20 17:56:43 · 19059 阅读 · 0 评论 -
C++编程中的段错误:segmentation fault和bus error常见原因和捕获方法
任何一个C++ coder应该都碰到过这个问题,程序跑着跑着直接出现这个错误,整个程序崩掉。这个错误的本质原因在于代码中有代码访问了不属于代码进程的内存范围,就会触发这个segmentation fault。或者换句话说就是,内存访问越界,访问了不属于自己的内存。在说具体哪些之前,先简单插一句,为什么内存访问会越界,又为什么会提示segmentation fault这个错误信息。原创 2024-12-12 09:41:45 · 283 阅读 · 0 评论 -
使用std算法库:排序sort来排基本类型与类对象
在C++的std库中,提供了不少基础的算法工具库,比如最基本的查找,排序等,基本上都是封装了性能极高的查找和排序算法,基本上不需要自己再去琢磨和手写各种计算机算法了,比如快排什么的,直接使用即可。不过这些算法库基本用法挺简单,在基础用法的基础上,还是有一些厉害一点的用法。原创 2024-12-12 09:40:19 · 157 阅读 · 0 评论 -
使用std算法库:使用find算法来处理基础类型与类对象
在C++的std库中,提供了不少基础的算法工具库,比如最基本的查找,排序等,基本上都是封装了性能极高的查找和排序算法,基本上不需要自己再去琢磨和手写各种计算机算法了,比如快排什么的,直接使用即可。不过这些算法库基本用法挺简单,在基础用法的基础上,还是有一些厉害一点的用法。原创 2024-12-09 10:27:45 · 215 阅读 · 0 评论 -
用C++代码利用std::filesystem库写入一个文件路径到数据库中
使用C++代码写数据库不是什么麻烦事,但是和成熟的JAVA体系不一样,C++没有那么多成熟的数据库操作,比如mybatis等等。而且C++一般来说也不会用于写业务软件,不会用比较重的三方库。所以有时用C++代码来直接操作数据库,碰到的一个问题是:需求是将一个形如:c:\test\test.log这样的文件名写入到该字段。本来这个需求非常简单,麻烦就麻烦在路径间隔符同时在C++和SQL语言中都是一个转义字符。原创 2024-12-09 10:23:04 · 87 阅读 · 0 评论 -
C++代码中为什么要有extern C——防止集成C代码库链接失败
在C++代码中,很多引用头文件中都会有extern "C"的代码。这个表示这一段代码是使用C的标准写的,要求C++编译器按照C语言的标准来编译和链接。那么,这个关键字到底干了啥,这就是这一篇文章需要说清楚的问题。原创 2024-12-05 11:45:38 · 96 阅读 · 0 评论 -
操作系统内存模型初探——一次C++内存泄漏深究
已提交内存,其实就是内存分页管理中的一个概念,或者说是windows弄出来的一个概念,实际上就是物理内存 + pagefile。原创 2024-12-05 11:44:44 · 219 阅读 · 0 评论 -
C++中的操作系统级信号处理——signal与sigaction
在多进程的编程中,信号是一种非常重要的多进程通讯手段。而进程间的信号很大情况是和操作系统是相关的,或者说很多信号是从操作系统中过来的。我们这一篇就来说一下操作系统的信号。操作系统中的信号其实在操作系统中可以称作是中断,可以理解为一个循环执行的程序中突然收到一个通知,或者信号,操作系统分配一个中断处理程序来处理这个中断信号。基本上所有的操作系统都是基于这个逻辑。而中断又可以简单的分成两个大类,硬件中断和软中断。原创 2024-12-03 09:21:33 · 320 阅读 · 0 评论 -
C++多线程编程场景(原子操作 + 生产者消费者模式)
也就是说一个线程通过修改共享内存中的一个变量,另一个线程就可以通过某种规则得到这个变动,作出相对应的动作。所以,多线程的通讯方式就可以看成是使用共享内存的方式。而控制共享内容的有序利用,主要的技术手段就是锁。在锁机制的基础上,用于多线程的通讯方式还有一些具体的使用方式。原创 2024-12-03 09:19:53 · 77 阅读 · 0 评论 -
嵌入式开发之STM32单片机结构
这一篇就先来了说说F407的引脚,我觉得STM32的开发基本上是围绕着STM32这款微控制器来进行的,所以了解微控制器有哪些引脚是一个比较好的开始。原创 2024-11-30 20:50:56 · 258 阅读 · 0 评论 -
C++类中多线程的编码方式
在C++代码中,一般的代码是需要封装在类里面,比如对象,方法等。否则就不能很好的利用C++面向对象的能力了。但是这个方式在处理线程时会碰到一个问题。一个类中有一个线程对象,并编写一个对应线程函数,在初始化时启动这个线程。而且这个线程中是需要访问到类中的其他成员变量的。这是面向对象语言的一个搭建类的基本方法。但是上面的代码是无法编译通过的:也就是说作为线程函数是需要为一个static方法的。原创 2024-11-30 20:48:46 · 401 阅读 · 0 评论 -
使用CEF框架实现文件下载
cef框架实现下载逻辑原创 2024-11-27 10:55:29 · 172 阅读 · 0 评论 -
std库锁机制的使用
在多线程编程中,关键资源的读写访问是程序员需要非常重视的部分。而控制好读写主要靠的就是锁机制,在各个编程框架中都提供了锁的实现机制。这一篇就简单列举一下std标准库中提供的一些锁机制。原创 2024-11-27 10:53:13 · 578 阅读 · 0 评论 -
C++泛型编程标准:C++17的std::variant
C++从11标准开始,越来越多的是增加C++这门语言的泛型编程能力,包括增加一些关键字,auto,decltype等,还是增加一些标准库的能力,我个人觉得都是提高泛型编程能力。还有就是提高语言使用的易用性和安全性,越来越像一门专门的面向对象语言,离传统中标准的C或者C++越来越远。这一篇要提到的std::variant库有点像原来的union联合类型。但是std::variant支持的类型和安全性都比union联合类型要强大。代码编译的时候记得增加 -std=c++17的编译选项。原创 2024-09-30 11:53:56 · 279 阅读 · 0 评论 -
C++标准的一些特性记录:C++11的auto和decltype
在C++11中,引入了两个新的关键字,auto和decltype两个关键字,都是用于做类型推断。但是使用的场景有些区别。原创 2024-09-19 22:24:51 · 305 阅读 · 0 评论 -
C++标准的一些特性记录:C++11的thread_local
在多线程的编程环境里,一般来说,所有的线程都是共享同一个内存空间,也就是说如果定义一个变量,这个变量是被所有线程共享的,所以多个变量在访问同一个变量时,是需要加锁机制的,否则就会出现问题。在C++11中,引入了一个关键字thread_local,如果有这个关键字修饰变量的话,编译器会将这个变量自动给每个线程都复制一份。这样就不需要进行加锁了。我们用两端代码来对比一下,同时在代码中将变量地址输出,就可以看到是不是复制了一份了。原创 2024-09-19 22:24:10 · 349 阅读 · 0 评论 -
C++标准的一些特性记录:C++11的constexpr
c++11特性之constexpr原创 2024-09-14 10:42:44 · 292 阅读 · 0 评论 -
C++标准的一些特性记录:C++11的nullptr
c++11特性之nullptr原创 2024-09-14 10:41:46 · 205 阅读 · 0 评论 -
C++中文处理问题:string与wsting互转
但是没有专门说在C++代码中如何处理string和wstring的互转。这里补充一下,在C++中,string是基于char的,而wstring是基于wstring,所有相关的函数都是不一样的,比如cout是处理string,而wstring就需要专门的函数wcout来处理。因为在C++代码中,通过指针去移动地址是频繁的操作,而移动多少算一个字符,在string和wstring中是大不一样,而且和编码有关,比如GBK和UTF-8的移动规则就不一样,所以,在C++的多语言编程中,这两个东西就是至关重要的。原创 2024-09-12 14:57:56 · 378 阅读 · 0 评论 -
C++代码无法调试——说说编译器优化级别
在VS的IDE中,只有选择/Od这个禁用优化的级别,才能保证你的代码中的所有的代码都会被编译器编译链接,这样才能调试到每行代码。其他级别的优化,编译器都会根据情况优化掉一些代码,特别是一些无用的代码,重复的代码,这样,这样代码就不会出现在pdb文件中,自然就无法被调试了!但是,有的时候会发现,你的IDE中,调试到有些行的代码时,这个变量是无法查看的,IDE还莫名其妙的告诉你,这个变量没有被定义!在VS中,你可以注意一下,debug和release两者的优化级别,一个就是/Od,一个应该是/O2.原创 2024-06-20 10:39:22 · 414 阅读 · 0 评论 -
CEF框架:CEF中的窗口
在初始化过程中,还有两个内容可以拿出来说一下,就是CEF中的窗口和消息循环。这一篇说一下窗口。和前面的文章一样,还是以CEF中的标准示例为例来说明,最后给出一个小的例子:CEFSIMPLECEFCLIENT。原创 2024-06-05 10:27:36 · 403 阅读 · 0 评论 -
CEF框架:各种各样的Handle(四)——CefURLRequest,发起HTTP请求与处理
OnRequestComplete,也就是当requst请求得到响应后,CEF框架就会调用这个函数,在上面的代码中可以看到,就是调用了callback_方法(这个callback就是记录了JS的匿名方法了),把对应的download_data返回到前端显示。为了节省篇幅,我将这个类中的所有注释全部去掉了,这个类就是定义了在HTTP请求的整个过程中,几个关键事件的钩子函数,这个几个函数都是纯虚函数,所以需要完成URLREQUEST的使用的话,自定义一个类对这个几个函数都需要重定义。原创 2024-05-27 17:25:45 · 582 阅读 · 0 评论