
C++常用技术栈及易忽略的问题
文章平均质量分 95
_the_sun
间歇性学习 持续性躺平
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
常见的设计模式(3)工厂模式
工厂模式的基本理解。简单工厂是小作坊,可以生产同一品类的各个产品;工厂模式是产品线,一个工厂只能生产一种产品;抽象工厂是一个品牌的生产商,相当于对简单工厂限制为生成这一系列风格的产品,而抽象工厂能创建多个风格的简单工厂。但在该系列新增新产品的时候,需要从抽象工厂开始修改,严重违反开闭原则。所以具体使用哪一种设计模式,还得看情况讨论。原创 2025-09-04 13:27:50 · 717 阅读 · 0 评论 -
一文弄懂C/C++不定参数底层原理
探讨了可变参数的实现方式,从C语言到C++的演进过程。首先介绍了C语言基于栈帧的可变参数机制,通过<stdarg.h>宏手动读取栈中参数,但存在类型安全问题。其次分析了宏函数的可变参数实现,通过预处理阶段文本替换提高效率。最后详细讲解了C++11可变参数模板,利用编译期递归解包实现类型安全,并对比了三种方式的优缺点。原创 2025-09-03 14:14:24 · 891 阅读 · 0 评论 -
NAT与内网穿透
本文深入探讨了NAT技术的原理与应用。首先解释了NAT出现的背景:IPv4地址资源枯竭,通过NAT技术实现多个内网设备共享一个公网IP。详细介绍了NAT的三种类型:静态NAT(一对一固定映射)、动态NAT(多对多临时分配)和NAPT(多对一,利用端口转换)。重点分析了NAPT的工作原理,包括其自带的安全防护功能(阻止外部主动连接)和局限性(外部无法直接访问内网设备)。最后介绍了内网穿透技术,通过FRP等工具利用公网服务器作为中转,解决NAPT的访问限制问题,并提供了FRP的详细部署步骤。原创 2025-09-02 11:03:24 · 1080 阅读 · 0 评论 -
如何使用VMware创建一台Ubuntu机器
如何创建Uubntu虚拟机,并且解决了在同一个路由器下的内网通信问题,采取的是NAT模式+端口映射的解决方案原创 2025-09-01 20:52:22 · 1317 阅读 · 0 评论 -
Reactor设计模式及其在epoll中的应用
Reactor的产生过程,采用这种设计模式对于编程有什么好处,网络epoll是如何使用Reactor模式的?并且提供了一份通用的示例代码,后续可以直接在这个代码上进行应用层的封装。原创 2025-08-19 00:44:46 · 810 阅读 · 0 评论 -
常见的设计模式(2)单例模式
单例模式作为最常见的设计模式,本文从新手思考的方式,逐步完善。最后用到C++11的局部静态变量magic static的特性简化代码,并将其封装成一个模板基类,方便后续开发的使用。原创 2025-08-12 16:04:13 · 886 阅读 · 0 评论 -
C++移动语义、完美转发及编译器优化零拷贝
移动构造实现资源的转移,减少了一次深拷贝。而编译器的优化实现零拷贝,则是直接让临时变量处,优化成直接构造。关于万能引用和完美转发则是在模板、auto范围for循环中才会使用到。std::forward本身并不识别类型,而是T模板参数已经记录了。原创 2025-08-10 18:11:21 · 844 阅读 · 0 评论 -
C++虚继承路径独立的判定、vbptr的层级访问
有几个独立的路径,就会有几个vbptr。反过来路径有重合的地方就会合并成一个vbptr,从最外层依次嵌套vbptr访问到最底层的Base虚基类。原创 2025-08-05 17:15:25 · 763 阅读 · 0 评论 -
常见的设计模式(1)观察者模式、策略模式
设计模式关在在于找到稳定点、变化点。然后对稳定点采取抽象接口的思想让他更加稳定;而变化点则通过继承、多态等方式实现扩展,不影响原来的代码,符合开闭原则。而本文讲解了常见的两种设计模式:观察者模式,通常用于一对多的订阅响应场景。策略模式,通常用于多个路径下选择单一路径的策略选择场景。原创 2025-08-04 13:56:47 · 902 阅读 · 0 评论 -
设计原则和设计模式
讲解了设计模式是各种设计原则的产物,利用设计模式可以方便后续的功能扩展等。同时组合最好使用多态组合,而非静态组合,也是为了后续方便功能的扩展。强调开闭原则---扩展开放、修改封闭。原创 2025-08-03 18:48:05 · 1108 阅读 · 0 评论 -
C++红黑树
红黑树为什么要设置nil节点?对于插入情况下,有多少种情况分析?原创 2025-08-03 09:47:25 · 751 阅读 · 0 评论 -
C++中typename基本用法
在使用模板类中定义的类型的时候,且该模板参数并没有定死(编译写死)的时候,必须使用typename;而在后来开发的时候根据需求对T模板类型已经确定下来,如vector<int>就不需要加typename原创 2025-08-01 22:36:35 · 858 阅读 · 0 评论