- 博客(48)
- 收藏
- 关注
原创 我的C++规范 - 线程池
在线程池中执行的代码都是在子线程中,所以你需要注意共享数据的上锁问题,否则就会引发问题,在子线程中的数据是很难回到主线程的,因为开启子线程去处理的问题通常是非常耗时的,如果还要回到主线程那依旧会阻塞,那开始子线程就没有了意义。线程池通常数量是有限的,让任务太多,且非常耗时的时候,休眠的线程就会会用光,当每一个线程都被使用时,任务就会进入排队状态,他在等待其他任务的结束,然后执行正在排队的任务。
2026-02-03 12:54:53
592
原创 我的C++规范 - 鸡蛋工厂
设想一下,步骤一,如果你判空时上锁然后解锁,你知道到此时有数据,步骤二,你开始获取数据,步骤三,上锁并弹出数据后解锁你确保了数据一致性,看起来没问题,但是在多线程下,你在步骤一解锁后可能另一条线程就已经率先弹出数据了,然后等你执行到步骤三发现容器是空的,程序崩溃。作为收集方,当生产的进度太快就会吃掉太多性能,让消费方无法快速处理,你需要平衡他们之间的数据差以限制接收部分生产方的内容,转为消费方,速度比生产方慢几乎是必然的,你需要火力全开的同时还尽可能的优化处理速度。
2026-02-03 12:53:43
566
原创 我的C++规范 - 分兵三路
多线程的数据竞争是一个很有趣的事情,在 work_add_th 函数会使得变量 num 加一,假设 num 此时为 100,那运算结果为 101,但是在 100 和 101 中间,如果刚好完整的执行了 work_sub_th 函数减一,此时 num 的值会变成 99 ,那 work_add_th 的执行结果应该是 99 + 1 = 100 才行,但实际上的结果会变成 99 + 1 = 101 ,一个很奇怪的现象,他们一共执行了两次,但确是执行一次的效果。
2026-01-30 11:39:10
782
原创 我的C++规范 - 重写最速公式
你可以看到,我在 recv_input 输入类就已经确认了所有的状态输入,并决定了具体的状态,在使用时就可以直接使用这些状态,比如你知道游戏正在进行,或者返回菜单,退出游戏之类的,都是在输入时就已经确认好了,如果你选择在每一地方都自己处理输入,那你可能要处理这些重复值。如果你看过 玩一个小游戏 的那一篇文章,你会发现那时间编写的代码可以说是束手束脚,但到了这里,C++的所有基础语法几乎都已经学完了,那是时候以更好的方式对 最速公式 小游戏的代码进行重写了,这一次采用的是面向对象的方式实现。
2026-01-30 11:38:10
599
原创 我的C++规范 - 数据存储器
你会发现不管是 arr 数据,或者是分配的 new_mem 分配的数据,都是采用了 void* 这种空指针类型,这种类型表明了存在一块数据内存,但是这个数据的类型是不确定的,空指针数据是不能使用的,而且空指针本身的类型不明确,一旦转换错误程序就直接崩溃了,这是非常不安全的行为。不过我要先声明的是,这一篇文章的代码中充满了不好的习惯,这些代码是为了演示使用指针和堆区来存储数据而强行使用的,在真正的编码中,实现一样的功能我们可不需要怎么复杂的操作,而且这一篇文章充斥着各种垃圾代码,新手请不要模仿。
2026-01-28 13:07:42
618
原创 我的C++规范 - 指针指向
在代码 main.cpp 文件中 指针寻指 的例子来告诉你,指针的移动规律,int *ptr 时移动的是 4 byte ,变成 long long *ptrll 时移动的是 8 byte,也就是说指针是根据类型决定自己每次移动的步长的,如果有类型是 100 byte ,那他的指针移动一次就是 100 byte,指针的这个特性决定了它在相同类型数组下,每次移动都可以指向这个类型的完整数据。
2026-01-28 13:06:08
647
原创 我的C++规范 - 回调的设想
相比与传统的函数指针,std::function 在使用上更像一种变量,它可以很明确的声明一种函数类型,然后在后续中调用,我推荐你使用 std::function ,它可以代替函数指针,但是你要注意的是, std::function 是类对象,所以建议在执行时判空,否则传入为空时执行会直接崩溃。使用引用时,你需要关注使用的数据不能提起被释放,否则数据失效,因为引用的是同一块内存,通常不推荐使用引用类型的参数,因为相比拷贝,使用引用需要注意的问题更多,而且容易疏忽,所以更容易崩溃。
2026-01-24 17:55:13
582
原创 我的C++规范 - 随机时间点
你应该也看到 rand_int 这个类是分为 rand_int.h rand_int.cpp 两个文件的,他们是采用文件分离的方式写的,这是C++的普遍做法,请你也保持这个习惯,教学代码例子里面都习惯将声明和定义写在一起,是因为这样可以让代码看起来更简洁和完整。
2026-01-24 17:54:04
636
原创 我的C++规范 - 你该如何使用容器
在 main.cpp 文件与打印结果都太长了,这一篇文章我把他们放在了文章最后,文章后半段有容器结构图、完整代码、打印结果在编程中,我们总需要处理一些数据,当数据的数量变得庞大之后,不同存储数据的方式将会影响到处理数据的速度,而且这个影响是非常大的,我们需要注意使用合适的数据结构对数据进行储存在 main.cpp 文件中,我列出了 STL 标准库的常用容器用法,他们的一些简单用法足以覆盖平时的使用。
2026-01-22 15:16:12
690
原创 我的C++规范 - 给我重载到那了
因为重载符是一个简单的符号,而不能像函数一样可以起一个直观的名称,所以重载符可能会被误解,所以重载符最好的应用应该是有常识的,比如使用 > 对比大小,使用 == 对比是否相等这类符合常识的运用。重载符的作用是让直到的人可以更方便的调用,不知道的人可以使用函数版本,而不是只提供重载符版本,一个类的功能应该是先提供函数,然后在基于方便使用的考量下才出重载版本。重载符可以让类或者变量之间的运算变得简单,使得他们可以通过简单的符号去形式,但是要注意的是,重载符是成员函数的延伸,而不是单一的功能。
2026-01-22 15:09:37
408
原创 我的C++规范 - 请转移到文件
你会发现在 main.cpp 文件中,有特别多的 { } 的作用域,这些作用域类似函数一样,他们能将变量隔绝在一个区域内,这样写可以限制变量的范围,你就可以在同一个函数下什么相同的变量名称,也可以让独自运行的代码划分出不同的区域。读取时文件指针在首位,当第一次读取整个文件时,文件指针会随着读取的进度到到达尾部,一旦到达 EOF 文件结束标记,文件都无法在读取内容了,如果你想再次读取,你需要向前移动文件指针。这是使用文本的关键步骤,文件不一定可以成功打开,所以需要判断,如果打开失败,后续的操作就无法执行。
2026-01-20 12:24:12
550
原创 我的C++规范 - 未知参数处理
你应该先看看 main.cpp 文件中,两种替换字符串的使用,在使用 replace_str_ref 函数时,你需要替换几次就需要调用这个函数几次,但使用 replace_args 类是,它总是可以通过一行代码就完成数次替换,而且它是可选的,你想替换几次就替换几次。当你有了递归函数,有了 Targ…需要注意的是,递归执行虽然每一次都执行的同一个函数,但实际上每个函数都是被单独复制出来的,每个函数的内部变量等数据会被放到函数栈中,然后以层层递进的方式执行函数,每一个递归函数的状态都是独立且全新的。
2026-01-20 12:22:48
541
原创 我的C++规范 - 跳跃的对象
面向对象中,可以将代码实现往逻辑设计上靠拢,他们希望将各种复杂的功能都符合逻辑,符合设计,他们习惯将各种功能都抽出成为接口,接口是被规定的,而且不可更改的,一个好的接口设计可以让一切都合乎情理,接口可以统一代码,可以忽视他们在具体功能上的差异,将他们统一到一种类似流水线的逻辑当中,让他们在这一条线上总是保持着一致的运行规律。
2026-01-15 14:55:40
659
原创 我的C++规范 - 今天是星期几
这个字符串被 R"()" 给包裹起来,这种写法叫 R表达式 ,你要是注意看打印结果就会发现,这段字符串的打印是有换行的,但是代码没有出现 \n 等换行符,这是因为R表达式会以肉眼可见的方式转化为字符串,更符合人的文本编写,R表达式适合进行大量多行复杂本文的编辑,因为它是所见既所得的,且不需要处理转义字符。在编程中大部分时间都是在处理各种各样的数据,他们可能是简单的或者是复杂的一堆数据,我们需要的就是要处理这一堆堆的数据,那首先第一步就是要创建自己的一堆数据,以及如何使用他们。
2026-01-15 14:54:06
540
原创 我的C++规范 - 玩一个小游戏
但是你会发现,在上面的最速公式游戏 main.cpp 代码上,我使用了两处的 switch 指令,这是为什么呢,当分支类型使用整数,且类型一致,且可能存在很多分支,且分支内代码简单少量,且代码高度一致时,我才会考虑使用 switch 指令来代替 if,很显然这个代替的条件很苛刻。作用域还是一个变量范围的问题,内层作用域是可以直接使用外层作用域的变量的,因为内层作用域本身也是外层作用域的内部,但外层不可以使用内层的变量,同层也不行,因为变量是被限制在作用域之内的,所有内层可以使用外层变量,这一点请注意。
2026-01-13 16:06:25
684
原创 我的C++规范 - 拒绝重复代码
/ short 类型i++)byte >>= 1;return ret;// int 类型i++)byte >>= 1;return ret;
2026-01-13 16:02:09
522
原创 我的C++规范 - 你的第二个函数
/ 函数解析// std::string 是函数返回值// print_byte_int32 是函数名称// int byte 函数参数,int 是类型,byte 是名称// 函数作用域开始// 函数作用域结束在C++中,函数是十分常见的,从 main 函数开始,我们就已经接触了第一个函数,函数是无处不见的,函数也十分关键,我们需要创建一个自己的函数函数由函数名,参数,返回值构成,我们调用时需要使用函数名和传入参数是必须的,返回值是选择性接收的。
2026-01-11 13:26:45
591
原创 我的C++规范 - 计算压岁钱
今天来讲一讲如何使用代码计算,上面的代码简单的样式了数学中加减乘除的用法,用于计算一些问题,上面的代码的每一处计算都是有实际需求的,这个系列的文章并不会列举出所有的计算符号与功能,只会举例子对功能进行说明,如果你需要更详细的资料请自行使用AI查询。C++中需要运行计算代码,离不开变量,变量是一种存储数据的容器,这种数据可以是任何东西,如数字/字符/地址等等,需要将他们存入变量,然后使用运算符进行计算,计算的结果依旧在变量中,因为结果也需要使用变量来存储。
2026-01-11 13:24:17
907
原创 我的C++规范 - 请移动到头文件
相信你已经看到了头文件内不仅仅是将 MCLOG 复制到 mclog.h 文件中,文件内还存在着另三个 MCLOG_H 宏将 MCLOG 的内容包裹住,这个 MCLOG_H 是保护宏,它的功能就是将头文件的内容进行保护,让同一个 .cpp 文件只能导入一次头文件,如果重复导入 mclog.h 则直接退出,因为重复导入会引起重命名问题,导致程序编译失败。这个宏是不规范的,它没有使用字母,并不遵循一般的命名规则,但确可以简单高效的打印出变量名与对应内容,这是我使用它的原因,我也推荐你去使用。
2026-01-09 10:57:06
454
原创 我的C++规范 - 第一个标准程序
宏定义(macro)是新手不好理解且不推荐随意使用的,但在这里第一个程序就使用了,因为我们需要打印日志打印日志非常中重要,通常日志需要附带日期时间/文件位置/代码函数等信息,在打印中附带日志信息可以帮助开发者调试程序日志信息打印是编程规范的重要一步但是手动编写复杂重复的日志信息又十分烦人,所以可以借助宏来完成这一步,先说宏定义的功能,它只是简单的复制你为他制定的内容,它需要你指定一个别名和原本代码,然后它会在编译时在别名位置替换为原本代码。
2026-01-09 10:55:05
338
原创 我的C++规范 - 准备编译环境
如果你还没有意识到C++有多麻烦,这一篇会让你认识到这一点,如果你无法完整这一篇的教学内容,那你现在推出还没有任何损失C++需要开发者从零构建和管理自己的项目,如果你是新手,那就请在我的指引下,配合AI来搭建并运行你的第一个C++程序。
2026-01-07 16:20:41
831
原创 我的C++规范 - 前言
如果你是一个编程新手,从来没有学过任何编程的,经过一系列思考之后在众多的编程语言中选择了C++语言,那么恭喜你,你选择了一个又古老又复杂又落后又麻烦的编程语言C++是一门古老的编程语言,在历史长河中能存活下只有一个最关键的优势,性能性能性能,除此之外对比现代编程语言没有任何优势,如果你决定以C++作为入门语言,那将是地狱开局。
2026-01-07 16:14:52
850
原创 C++工具:C++日志模板--提供调试日志和文件日志
提供C++简单日志,分别为控制台调试日志、文件日志。调试日志有自定义等级划分,不同等级的颜色显示。文件日志提供单文件无限写入与多文件循环写入,支持控制文件数量与最大文件字节
2023-06-28 15:45:06
776
原创 C++容器:管道容器[stack - queue]
讲解C++ STL管道容器的简单使用,分别包括stack、queue、deque三个容器,使用生产者、消费者模型,重点解析queue容器在多线程下的数据同步操作
2023-05-26 20:59:09
267
原创 C++工具:C语言链表实现C++STL接口--支持泛型宏
C语言用面向对象思想实现C++STL泛型链表,支持类面向对象、支持泛型、支持自定义分配器
2023-05-12 15:08:58
313
原创 C++工具:仿C++STL接口的C风格链表--支持函数泛型
提供纯C风格的带头结点链表,操作接口类似C++STL容器,提供泛型宏接口,统一各类型操作,提供链表的详细操作步骤
2023-05-07 11:33:17
169
原创 C++网络:TCP点对点通信-附带文件传输代码实例
本章介绍C++中TCP协议的使用以及点对点设计方案,提供了文件发送与文件传输的简单协议实现参考,提供string字符串的发送协议
2023-04-07 11:07:43
1251
原创 C++网络:IO复用epoll服务器-附带网络聊天室代码实例
使用epoll实现IO复用服务器,解析epoll的用法,并编写以epoll为基础的网络聊天室,其中附带上一份可用的轻量级服务器与客户端代码
2023-04-03 13:43:17
661
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅
1