自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(20)
  • 收藏
  • 关注

原创 侯捷C++系列笔记:C++2.0新特性(二)

本文介绍了现代C++中的关键特性及其应用: 类型别名:using替代typedef,支持模板别名和命名空间导入 异常说明:noexcept声明不抛异常,对移动操作至关重要 继承控制:override确保正确覆写虚函数,final禁止继承/覆写 类型推导:decltype获取表达式类型,支持模板编程 Lambda表达式:匿名函数,支持捕获列表和可变参数 移动语义:右值引用(&&)和完美转发(std::forward)实现高效资源转移 可变参数模板:支持任意数量/类型参数,用于元编程

2026-01-26 16:01:03 350

原创 侯捷C++系列笔记:C++2.0新特性(一)

摘要:本文系统梳理了现代C++(C++11及后续版本)的核心特性,包括可变参数模板、nullptr、explicit构造函数、范围for循环、=default/=delete、别名模板和模板模板参数。重点讲解了可变参数模板的递归展开与C++17折叠表达式、nullptr的类型安全性、explicit防止隐式转换的机制、范围for的实现原理,以及=default/=delete对特殊成员函数的控制。通过代码示例展示了别名模板简化复杂类型声明和模板模板参数的适配技巧,并对比了新旧特性的差异。

2026-01-25 14:25:26 728

原创 侯捷C++系列笔记: 面向对象(二)

C++标准库基于泛型编程思想,采用容器、迭代器、算法和仿函数四大组件解耦设计。容器存储数据,迭代器提供统一遍历接口,算法通过迭代器操作容器,仿函数定制算法行为。可变参数模板(C++11)支持任意数量参数,通过递归或折叠表达式处理参数包,结合std::forward实现完美转发。auto关键字简化类型声明,支持范围for循环和lambda表达式类型推导。范围for循环(C++11)通过begin()/end()实现容器遍历,支持只读(const auto&)和修改(auto&)两种方式

2026-01-24 17:59:19 786

原创 侯捷C++系列笔记:面向对象(一)

本文介绍了C++模板编程的三种主要形式:类模板、函数模板和成员模板。类模板用于定义通用类结构,通过类型参数生成具体类;函数模板实现通用算法,支持参数类型推导;成员模板则允许在类中定义嵌套模板,主要用于类型转换场景。文章通过代码示例展示了模板的基本用法、参数默认值、重载规则以及类型兼容转换等关键特性,并强调了模板的编译机制和使用注意事项。这些模板技术有效避免了代码重复,提高了程序的通用性和复用性。

2026-01-23 12:52:59 879

原创 侯捷C++系列笔记:标准库体系结构(三)

STL适配器是复用已有组件适配新接口的核心设计模式,主要分为三类:迭代器适配器(如reverse_iterator)、函数适配器(如bind2nd)和容器适配器(如stack)。它们通过组合而非继承实现接口转换,具有无性能损耗的特点。其中bind2nd将二元仿函数转为一元仿函数,not1对一元谓词结果取反,而现代C++的std::bind提供了更灵活的绑定方式。流迭代器(ostream_iterator/istream_iterator)将IO操作包装为迭代器接口,适配STL算法。

2026-01-22 12:13:39 938

原创 侯捷C++系列笔记:标准库体系结构(二)

本文系统解析了STL核心容器的底层实现原理。list采用双向循环链表结构,通过哨兵节点简化边界处理;vector基于连续内存布局,随机访问高效但扩容成本高;deque实现分段连续内存,兼顾双端操作和随机访问;RB树作为set/map的底层,通过模板参数实现高度解耦;哈希表采用拉链法解决冲突,是unordered容器的实现基础。文章详细剖析了各容器的迭代器设计、内存管理策略和关键操作实现,揭示了STL通过traits机制统一处理类迭代器和原生指针的精妙设计,以及容器适配器的封装思想。

2026-01-21 11:38:44 869

原创 侯捷C++系列笔记:标准库体系结构(一)

本文系统介绍了C++标准模板库(STL)的核心概念和体系结构。主要内容包括:1. STL六大组件(容器、分配器、算法、迭代器、适配器、仿函式)的协作关系;2. 容器分类(序列式、关联式、无序)及性能测试方法;3. 分配器原理及内存管理机制;4. OOP与GP编程范式对比;5. STL依赖的6大C++技术基础(操作符重载、模板等);6. STL源码分布及学习方法。文章强调STL通过泛型编程实现组件解耦,容器与算法通过迭代器连接,并详细解析了前闭后开区间、分配器调用链等核心机制,为深入理解STL提供了系统框架。

2026-01-20 11:15:21 912

原创 基于boost库C++网络编程(五):基于asio的多线程池和协程调度

本文系统分析了Boost.Asio网络库的四种核心并发模型:1)IOServicePool采用多io_context+多线程架构,实现IO事件隔离处理;2)IOThreadPool通过单io_context+多线程+Strand解决线程安全问题;3)协程调度利用C++20协程消除回调地狱,实现同步式异步编程;4)HTTP服务器实现展示应用层协议解析方法。四种方案针对不同并发场景,从底层IO处理到上层协议实现,构建了完整的网络编程体系,在性能优化和代码可维护性之间取得平衡,为高并发网络服务开发提供了灵活选择。

2026-01-19 10:10:02 698

原创 基于boost库C++网络编程(四):IO 层与业务逻辑层解耦

本文摘要: 服务器设计采用异步IO与业务逻辑分离架构,核心优化包括:1)消息头升级为结构化格式(ID+长度+内容),配合JSON序列化实现业务解耦;2)通过LogicSystem单例实现生产者-消费者模型,分离IO线程与业务线程;3)基于消息ID注册回调机制,支持插件化扩展业务逻辑;4)采用mutex+条件变量保证线程安全,支持消息有序处理;5)实现优雅退出机制,包括信号捕获、资源清理和线程安全终止。该设计遵循职责单一原则,具有高并发、易扩展和安全可靠的特点。

2026-01-18 12:15:30 773

原创 基于boost库C++网络编程(三):发送队列和粘包问题

本文总结了网络通信中发送队列封装与粘包处理的核心技术。发送队列采用全双工通信模式,通过enable_shared_from_this解决异步回调中的对象生命周期问题,使用互斥锁确保线程安全。针对TCP粘包问题,介绍了两种解决方案:手动解析方案通过长度前缀和循环处理实现数据边界划分;简化方案利用async_read分阶段读取头部和数据体。此外,文章还强调了字节序转换、发送队列限流等关键优化点,确保跨机器通信的正确性和实时性。这些技术组合使用可构建高效可靠的网络通信框架。

2026-01-17 08:17:13 899

原创 基于boost库C++网络编程(二):asio异步读写

本文摘要:Boost.Asio异步IO的核心机制是通过发起操作后立即返回,操作完成后触发回调函数实现非阻塞通信。文章详细解析了异步读写的关键问题:分段传输处理、数据乱序问题及解决方案(发送队列+pending状态),并对比了基础接口(async_write_some/async_read_some)与封装接口(async_send/async_receive)的使用差异。同时介绍了Session类和MsNode数据结构在连接管理和数据分块传输中的应用,以及智能指针在生命周期管理中的重要作用。

2026-01-16 17:45:19 1010

原创 基于boost库C++网络编程(一):socket以及同步读写通讯

本文介绍了基于Boost.Asio库的TCP网络编程核心概念与实现方法。主要内容包括:1)socket连接与端点创建,说明客户端和服务端如何建立TCP连接;2)同步读写操作,详细讲解write_some/read_some和asio::write/asio::read等不同读写方式;3)缓冲区处理,介绍asio::buffer和asio::streambuf的使用;4)完整的客户端和服务端设计实现,其中服务端采用多线程处理多个客户端连接

2026-01-15 10:26:21 838

原创 C++多线程(四):无锁并发

有时候我们线程1对A的store操作采用release内存序,而线程2对B的load采用acquire内存序,并不能保证A 一定比 B先执行。分区(partitioning):重新排列数组,把比基准元素小的元素放在它的左边,把比基准元素大的元素放在它的右边。选择基准元素的方式有很多种,常见的是选择数组的第一个元素或最后一个元素。我们提供并行方式的函数式编程,可以极大的利用cpu多核的优势,这在并行计算中很常见。顺序,其他的顺序都不能保证原子变量修改的值在其他多线程中看到的顺序是一致的。

2026-01-13 15:20:44 804

原创 C++多线程(三):并发三剑客(future, promise, async)

C++11 引入的<future>头文件组件是异步编程的核心,std::async可通过指定启动策略异步执行函数并返回std::future,后者作为 “结果容器”,通过get()(单次阻塞获取)、wait()(仅等待)等方法获取异步任务结果,std::shared_future则支持多线程共享同一结果。std::promise与std::packaged_task可将任务与future绑定,分别用于设置值 / 异常、包装可调用任务。异步任务异常可通过future::get()重抛并捕获,基于这些组件还能构

2026-01-12 13:12:16 832

原创 C++多线程(二):并发竞争控制--锁与条件变量

本文系统介绍了C++多线程编程中的核心同步机制。主要内容包括:1)基础互斥量mutex及其RAII封装lock_guard和unique_lock的使用;2)线程安全栈的实现及竞态条件处理;3)死锁成因分析及解决方案(解耦合、同时加锁、层级锁);4)高级同步机制如共享锁、递归锁的应用场景;5)线程安全单例模式的多种实现方法;6)条件变量的正确使用方式及线程安全队列的实现。文章通过大量代码示例详细说明了各种同步机制的最佳实践,特别强调了避免死锁和伪唤醒的关键技巧,为开发高效安全的并发程序提供了实用指导。

2026-01-11 16:23:00 1321

原创 C++多线程(一): 线程基础

摘要:本文系统讲解C++11线程编程核心概念,包括:1) std::thread创建方式(函数、仿函数、Lambda、成员函数)及参数传递注意事项;2) 线程管理关键点(join/detach区别、RAII自动管理、局部变量生命周期风险);3) 底层实现原理(完美转发、tuple参数封装、系统API调用);4) 高级应用场景(线程容器、并行累加算法、硬件并发优化)。重点解析了"最令人头疼的解析"语法歧义、move语义所有权转移、std::ref引用传参等典型问题

2026-01-10 00:14:28 1061

原创 一篇文章吃透C++的CRTP(奇异递归模板)模式

CRTP(奇异递归模板)模式通过静态多态实现编译期多态,具有性能优势(无虚函数开销、支持内联优化)和编译时类型检查的优点,但会导致代码膨胀、增加编译复杂度且不支持动态加载。适用于高性能计算和嵌入式系统等场景。文中给出了CRTP的基本实现示例,并提供了四种扩展解决方案:1)非模板公共基类;2)类型擦拭技术;3)std::any/variant;4)命令包装器模式。其中方案1和方案4(基于多态和类型擦除)被推荐为最佳实践,既能保持CRTP的性能优势,又能解决其接口约束和动态性问题

2026-01-08 15:54:20 191

原创 C++模板元编程(Template Metaprogramming)

模板元编程是一种在编译期通过模板机制实现代码生成和计算的编程技术。其主要优势包括提高代码可重用性、减少运行时开销和实现类型安全抽象。典型应用如阶乘计算模板,通过递归模板实例化在编译期完成计算。静态成员变量规则要求类内声明、类外定义(C++17后可用inline变量)。高级技巧包括可变参数模板求和、类型列表处理(如TypeList)和类型索引访问(TypeAt),这些技术在泛型编程和编译期计算中发挥重要作用。

2026-01-07 15:43:37 159

原创 一篇文章理解清楚SFINAE(Substitution Failure Is Not An Error)

缺点: 1.复杂性高: 维护和阅读难度大 编译器错误信息难以理解 2.模板实例化深度限制: 过度使用SFINAE可能导致编译时间增加和模板实例化深度限制问题。替换失败不是错误,允许编译器在模板实例化过程中,如果在替换模板参数时失败,不会将其视为编译错误,而是继续寻找其他可能的模板或者重载。优点: 1. 灵活性高: 提升代码泛化能力 2. 类型安全: 通过了编译器检测,避免运行时错误 3.无需额外的开销: 类型筛选在编译器时期进行。常与std::enable_if,模板特化,以及类型萃取等技术结合使用。

2026-01-05 20:40:05 564

原创 CPU伪缓存

本文探讨了CPU缓存机制对程序性能的影响。通过矩阵遍历和并发统计两个案例,分析了缓存行(cache line)在多核处理器中的工作原理。当数据访问跨越缓存行或并发修改同一缓存行时,会出现伪共享(false sharing)问题,导致性能下降。解决方案包括:1)使用局部变量暂存结果;2)通过数据填充隔离缓存行。文章还提供了相关PPT和扩展阅读资源。

2026-01-03 10:24:14 967

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除