
C++高手修炼营
文章平均质量分 64
跟我一起成为Windows与 Linux平台下的C++编程高手!
优惠券已抵扣
余额抵扣
还需支付
¥9.90
¥99.00
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅专栏,享有专栏所有文章阅读权限。
本专栏为虚拟商品,基于网络商品和虚拟商品的性质和特征,专栏一经购买无正当理由不予退款,不支持升级,敬请谅解。
程序员乐逍遥
15年C/C++跨平台开发资深程序员、VX找我ha666ck
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
C++ 双缓冲(Double Buffering)实现无锁读取与高效数据更新
在高并发、高性能的 C++ 应用程序中,如何安全、高效地处理“”场景是一个经典难题。频繁的锁竞争会导致读性能急剧下降。技术为此提供了一个优雅而高效的解决方案。原创 2025-07-30 16:57:51 · 32 阅读 · 0 评论 -
Windows 下 VS2019 编译 libevent-2.1.10 库
1. 你需要VS2019 编译好openssl-1.1.1 ,这个具体编译或者下载可以参考我的博客。接下来,打开CMake ,主要是下面的需要设置好。最后Config Generate即可;然后INSTALL右键生成。最后生成的库是这两个文件。全部成功生成 22个。原创 2025-07-18 17:45:42 · 49 阅读 · 0 评论 -
C++ Boost Aiso TCP 网络聊天(服务端客户端一体化)
【代码】C++ Boost Aiso TCP 网络聊天(服务端客户端一体化)原创 2025-07-15 23:58:27 · 78 阅读 · 0 评论 -
VS2019编译使用log4cplus 1.2.0
logger.properties 文件。第三步,创建项目来测试,配置库。第二步,使用VS2019编译。原创 2025-07-14 16:58:14 · 289 阅读 · 0 评论 -
C++ 中的 std::bind 用法
在现代 C++ 编程中,std::bind是一个非常强大但常常被误解的工具。它允许我们将函数(包括成员函数)、参数进行绑定,并生成一个。这在编写异步回调、事件处理、适配器模式等场景中非常有用。原创 2025-07-14 11:21:50 · 236 阅读 · 0 评论 -
C/C++ 常用文件后缀.c 、 .h 、 .cpp 、 .hpp 、 .ipp 、 .cc 、 .cxx详解
含义用途:指定 DLL 导出的符号;仅限 Windows 平台;示例;EXPORTSMyFunction后缀语言类型常见用途是否必须.cC源文件C语言实现✅ 是.hC/C++头文件声明、宏、结构体等✅ 是.cpp.cc.cxxC++源文件C++实现✅ 是.hppC++头文件C++声明、类定义✅ 是.ippC++实现文件模板实现❌ 否.inlC++实现文件内联函数实现❌ 否.txxC++实现文件模板实现(Boost)❌ 否.defC/C++定义文件。原创 2025-07-13 14:17:38 · 122 阅读 · 0 评论 -
深入理解 Boost.Asio 中的异步核心 boost::asio::io_context
io_contextio_context是 Boost.Asio 中用于管理 I/O 执行上下文的核心类,它负责调度和执行异步操作。你可以把它看作是异步任务的“调度中心”或“运行引擎”。所有的异步操作(如网络请求、定时器、异步读写等)都需要通过一个io_context实例来驱动。场景建议单线程异步程序创建一个io_context并调用run()多线程并发处理多个线程调用同一个避免过早退出使用保持工作状态分离 IO 与业务逻辑使用post()或dispatch()将任务投递回主线程。原创 2025-07-12 18:56:05 · 87 阅读 · 0 评论 -
C++中Lambda表达式 [ ] 的写法
Lambda表达式的声明以方括号[ ]开始,这部分被称为捕获列表(capture list),用于指定如何从Lambda表达式外部捕获变量到其内部作用域。原创 2025-07-12 14:40:40 · 150 阅读 · 0 评论 -
C++ 轻量级cpp-httplib库详解
单个头文件(httplib.h),易于集成到项目中支持 HTTP 服务端(Server)和客户端(Client)同步 API 设计,简单易用支持 HTTPS(通过 OpenSSL)支持上传文件、表单解析、JSON 请求/响应等零外部依赖(可选启用 SSL/TLS)是一个极简、强大且灵活的 C++ HTTP 库快速搭建 Web 服务原型构建小型 RESTful API实现嵌入式系统的 HTTP 接口开发桌面工具的本地 HTTP 控制面板。原创 2025-07-08 16:37:34 · 110 阅读 · 0 评论 -
C++ 开发利器 Poco 库详解
Poco 是一个用 C++ 编写的开源类库,目标是简化现代 C++ 应用程序的开发过程。其名字来源于英文“”,强调其良好的可移植性和模块化结构。模块功能Foundation核心库,提供基本类型、异常、智能指针、字符串、日期时间等Util配置读取、命令行参数解析、服务抽象Net网络通信模块,支持 TCP/UDP、HTTP 客户端/服务器、FTP、SMTP 等XMLXML 解析与生成JSONJSON 解析与序列化Data数据库访问(支持 MySQL、PostgreSQL、SQLite、ODBC 等)原创 2025-07-08 16:20:36 · 528 阅读 · 0 评论 -
Windows 与 Linux 线程同步机制详解
同步机制Windows 特点Linux 特点共同点Mutex支持跨进程同步支持跨进程同步基础同步原语需要手动实现或第三方库内置支持优化读写并发API 更加面向对象API 更加传统 C 风格线程等待条件Semaphores提供了便捷的 API功能强大,支持跨进程同步控制访问数量提供了专门的事件对象可通过条件变量或信号量模拟线程间通知高效,仅限于单进程内的线程同步可通过实现,但不如临界区高效轻量级同步无论是 Windows 还是 Linux 平台, 可以对比起来记忆。原创 2025-06-23 13:34:49 · 148 阅读 · 0 评论 -
Linux 信号(Signal)与信号量(Semaphore)区别
【代码】Linux 信号(Signal)与信号量(Semaphore)区别。原创 2025-06-23 11:30:12 · 227 阅读 · 0 评论 -
Linux 多进程间通信(IPC)详解
通信方式是否持久化是否支持非亲缘进程是否支持双向通信同步机制说明Pipe(匿名管道)❌❌❌手动只能在具有亲缘关系的进程之间使用,如父子进程。半双工通信。FIFO(命名管道)✅✅❌手动支持无亲缘关系进程,通过文件系统路径访问,先进先出模式。Message Queue(消息队列)✅✅✅内建每个消息有类型,可选择性接收,适用于结构化数据传递。Signals(信号)❌(部分可发送)✅❌(单向通知)内建/手动异步事件通知机制,适合轻量级通知,不适合传输大量数据。原创 2025-06-23 11:28:01 · 78 阅读 · 0 评论 -
Linux 下使用 C 创建守护进程
在 Linux 系统中,守护进程(Daemon Process)是一种在后台运行的特殊进程,它脱离了终端会话,并且通常用于执行系统任务或提供服务。常见的守护进程包括sshdhttpd和cron等。原创 2025-06-23 10:22:40 · 302 阅读 · 0 评论 -
C++ 解析YAML 文件详解
YAML ( YAML Ain’t Markup Language 这个名称本身是一个递归缩写,意在强调 YAML 不是一种传统的标记语言)是一种人类友好的数据序列化语言,设计初衷是为了使配置文件更易于阅读和编写。它的语法不使用括号或引号,而是通过缩进来表示层级结构。原创 2025-06-22 21:57:14 · 91 阅读 · 0 评论 -
C++14 新特性详解与代码示例
C++14是 ISO C++ 标准的又一个重要更新版本,于2014 年正式发布。它是对C++11改进已有功能增强泛型编程能力提升 lambda 表达式的灵活性更加简洁的语法表达方式C++14 被广泛称为 “C++11 的小补丁(bug fix release)”,但它引入了许多开发者期待已久的新特性。类别内容效果语言改进泛型 Lambda、返回类型推导、初始化捕获更灵活的匿名函数数值支持二进制字面量、数字分隔符提高可读性和安全性模板增强变量模板、折叠表达式强化元编程能力。原创 2025-06-21 16:25:46 · 59 阅读 · 0 评论 -
Google TCMalloc 高性能内存分配器的设计与实现
是 Google 开发的一个高效的 C++ 内存分配库,全称是。它的设计理念——线程本地缓存 + 分级内存池,它被设计用于提升多线程环境下小对象的内存分配性能。TCMalloc 是gperftools工具集的一部分,广泛应用于高性能服务器程序中,如 MySQL、Redis、Google Chrome 等。// 简化 size class 表return p;原创 2025-06-21 16:17:59 · 64 阅读 · 0 评论 -
C++11 std::thread 多线程编程详解
线程是操作系统调度 CPU 时间的基本单位。一个进程中可以有多个线程,它们共享进程的资源(如内存、堆栈),但拥有各自独立的执行路径。虽然 C++ 标准库没有提供线程池,但我们可以通过队列和条件变量实现一个简单的线程池。private:});return;task();i < 8;++i) {});return 0;功能方法创建线程等待线程join()分离线程detach()互斥访问。原创 2025-06-21 15:18:24 · 126 阅读 · 0 评论 -
C++17 <filesystem>头文件 详解
头文件是一个命名空间下的一组类和函数,用于处理文件路径、文件状态以及目录操作。std::cout << "文件大小: " << size << " bytes" << std::endl;// 将 time_point 转换为时间字符串std::cout << "最后修改时间: " << std::asctime(std::localtime(&cftime));return 0;功能方法路径处理path类成员函数文件存在性检查文件类型判断目录操作removeremove_all。原创 2025-06-21 15:06:19 · 63 阅读 · 0 评论 -
C++ 函数参数传数组的技巧
方法是否需传递大小是否支持动态数组推荐程度模板 + 数组引用否否⭐⭐⭐⭐std::array否否⭐⭐⭐⭐否是⭐⭐⭐⭐⭐显式传大小是是⭐⭐⭐std::span(C++20+)否是⭐⭐⭐⭐⭐。原创 2025-06-21 13:34:58 · 36 阅读 · 0 评论 -
C++11 完美转发(Perfect Forwarding)
完美转发是指:在函数模板中,将一组参数以完全相同的方式(包括值类别、const 性质等)传递给另一个函数。如果传入的是左值,就转发为左值;如果传入的是右值,就转发为右值;如果传入的是 const 左值,就转发为 const 左值;……这使得我们可以在不写多个重载函数的情况下,支持任意类型的参数传递。标准库容器如的它会直接在容器末尾构造元素,避免不必要的拷贝或移动操作。// 构造一个 string,不调用拷贝或移动操作是否触发完美转发T&& param✅ 是T& param❌ 否。原创 2025-06-20 19:03:17 · 71 阅读 · 0 评论 -
C++11 右值引用(Rvalue Reference)
/ 合法:rref 是一个绑定到右值 5 的右值引用右值引用使用双引号&&表示,它可以绑定到临时对象(rvalues),而传统的左值引用(T&)只能绑定到具有名字的对象(lvalues)。操作是否触发移动是否调用拷贝是否掏空源对象T a;T b = a;❌ 否✅ 是❌ 否T a;✅ 是❌ 否✅ 是T a;✅ 是❌ 否✅ 是return a;(a 是局部变量)✅ 是(可能)❌ 否✅ 是(自动优化)右值引用是 C++11 中最重要的新特性之一,它不仅带来了移动语义。原创 2025-06-20 18:08:38 · 109 阅读 · 0 评论 -
C++ 11 智能指针 std::weak_ptr
类型是否拥有所有权是否增加引用计数是否可为空是否线程安全shared_ptr✅ 是✅ 是❌ 否✅ 是weak_ptr❌ 否❌ 否✅ 是✅ 是(调用 lock)是 C++ 智能指针体系中不可或缺的一部分。安全访问由shared_ptr管理的对象避免循环引用造成的内存泄漏实现高效的观察者模式、缓存系统等高级功能但同时也要注意它的使用限制和潜在陷阱,尤其是在多线程环境下的并发访问问题。原创 2025-06-20 14:38:12 · 63 阅读 · 0 评论 -
shared_ptr 类 之 std::shared_from_this 类的作用
定义了一个模板函数,_Ux是要管理的对象类型。这样允许该函数处理各种类型的指针(如int*MyClass*等)。表达式含义判断_Yty是否有_Esft_type类型(即是否继承了判断 A 是否可以从 B 公开、无歧义地继承最终结果:是否可以安全调用这个构造函数用于创建一个指向ptr的shared_ptr,但它并不增加原r的资源引用,而是共享其控制块。构造子对象的 shared_ptr在中绑定_Wptr在构造shared_ptr的过程中,自动检测并绑定继承了的对象的_Wptr。原创 2025-06-20 13:12:02 · 45 阅读 · 0 评论 -
C++11 std::shared_ptr 用法详解与常见陷阱
默认情况下,shared_ptr使用delete来释放资源。✅ 适用场景:文件句柄、socket、非堆内存等。是 C++ 中非常强大的资源管理工具,适用于多个指针共享同一资源的场景。然而,它也有一些潜在的陷阱,如循环引用、裸指针误用等。掌握以下几点,可以帮助你更好地使用shared_ptr使用替代裸指针构造避免循环引用,使用weak_ptr不要依赖做逻辑判断小心别名构造和自定义删除器的使用。原创 2025-06-20 11:41:54 · 49 阅读 · 0 评论 -
C++ 11 std::unique_ptr 自定义删除器
虽然unique_ptr默认使用delete清理内部资源(如B中的int* b使用非标准资源(如文件句柄、socket、线程等)改变释放方式(如调用fclose等)这时就需要为unique_ptr提供一个自定义删除器。删除器类型是否推荐说明函数指针✅简洁高效,适合固定行为Lambda 表达式✅✅可捕获上下文,适合一次性逻辑仿函数(Functor)✅✅✅可复用、可带状态,性能优秀✅更灵活,但有运行时开销struct B {删除器类型是否可带状态是否可复制性能。原创 2025-06-20 10:43:46 · 77 阅读 · 0 评论 -
C++ 11 类型推导 decltype 和 auto 的区别
场景推荐使用说明简化变量类型声明auto更适合日常开发中减少冗余代码获取表达式准确类型decltype更适合模板、泛型、元编程等高级用法保留完整类型信息结合两者优点,推荐在泛型中使用。原创 2025-06-20 10:37:33 · 66 阅读 · 0 评论 -
C++ 中的类型转换: static_cast dynamic_cast const_cast reinterpret_cast
C++ 提供了四种主要的类型转换操作符:、、 和 。 是最常用的类型转换操作符,用于编译时已知类型的转换。 无法移除const 修饰的类型。2. 用法: 主要用于多态类型之间的向下转型(downcasting),并且会在运行时进行类型检查。如果转换失败,返回空指针(对于指针)或抛出异常(对于引用)。3. 用法: 用于添加或移除变量的 或 属性。它是唯一可以修改常量性的转换操作符。4. 用法: 是最危险的一种类型转换,它重新解释底层位模式,不做任何类型检查。适用于低级操作,如直原创 2025-06-19 20:47:00 · 73 阅读 · 0 评论 -
为什么 C++ 11 引入了 `nullptr`
nullptr的引入是为了弥补 C++ 中空指针表示上的不足,提升语言的类型安全性和代码可读性。它是 C++11 中一个非常实用的小特性,建议所有现代 C++ 项目都使用nullptr替代传统的NULL或0。原创 2025-06-19 17:20:59 · 125 阅读 · 0 评论 -
Linux C语言创建多进程
每次fork()后,子进程应尽快调用exit()或exec()。父进程应及时回收子进程资源,避免僵尸进程。对于长期运行的程序,考虑使用守护进程模式。多进程之间需要通信时,可使用管道、共享内存、消息队列等 IPC 技术。原创 2025-06-19 16:29:51 · 76 阅读 · 0 评论 -
Linux 下 6 种常见进程通信IPC方式 Pipe FIFO
原创 2025-06-19 14:37:43 · 44 阅读 · 0 评论 -
Linux 下 多路复用 网络模型 select poll epoll
机制核心结构体初始化/创建注册/更新事件等待事件selectfd_set使用FD_ZEROFD_SET构建集合不需要单独注册,每次调用传入集合select()poll准备数组每次调用传入数组poll()epoll创建实例添加/修改/删除特性selectpollepoll文件描述符上限有(如 1024)无无每次调用是否遍历所有 fd是是否(只返回就绪的)是否支持边缘触发否否是性能(大量连接)差一般好推荐用于小型项目中小型项目高性能服务器。原创 2025-06-19 11:53:25 · 41 阅读 · 0 评论 -
Linux 下系统原生的 C++ 线程同步与异步编程详解(含示例代码)
方法所属是否推荐应用场景POSIX API✅ 推荐共享资源保护POSIX API✅ 推荐线程间通信POSIX API✅ 推荐读多写少场景POSIX API❗慎用短时间等待POSIX API✅ 推荐后台任务aio_readaio_writePOSIX AIO✅ 推荐高性能异步 I/OLinux 下使用原生的pthread接口可以实现高效的线程同步与异步操作,尤其适合对性能、资源控制有较高要求的系统级编程项目。原创 2025-06-19 10:53:03 · 31 阅读 · 0 评论 -
C++ 多线程同步std::condition_variable
特性说明所属头文件是否跨平台✅ 是是否线程安全✅ 是是否支持超时✅ 是推荐搭配、lambda 表达式是 C++ 中实现多线程通信和同步的强大工具。它可以让你的线程在特定条件下“休眠”或“唤醒”,从而避免轮询带来的资源浪费,并提升程序的效率和可读性。原创 2025-06-19 10:49:01 · 42 阅读 · 0 评论 -
Windows 下 C++ 线程同步与异步有哪些方式
方法所属是否跨平台是否推荐应用场景std::mutexlock_guardC++ 标准库✅ 是✅ 推荐通用同步C++ 标准库✅ 是✅ 推荐原子操作C++ 标准库✅ 是✅ 推荐条件等待❌ 否✅ 推荐Windows 内部同步Event❌ 否✅ 推荐线程通知std::asyncC++ 标准库✅ 是✅ 推荐异步任务C++ 标准库✅ 是✅ 推荐自定义异步任务IOCP❌ 否✅ 推荐高性能网络/文件。原创 2025-06-19 10:43:37 · 145 阅读 · 0 评论 -
C++11 移动语义(Move Semantics) 简介
移动语义的主要作用在于提高程序效率,特别是在处理大型对象或资源密集型任务时尤为明显。它不仅减少了不必要的内存分配和数据复制,还简化了资源管理,降低了错误发生的可能性。合理地设计和使用移动构造函数及移动赋值运算符,可以使你的 C++ 程序更加高效、健壮。原创 2025-06-19 10:37:46 · 509 阅读 · 0 评论 -
C++11 智能指针weak_ptr、shared_ptr与 unique_ptr
类型所有权模型是否可复制是否可移动引用计数是否支持观察unique_ptr独占❌✅无❌shared_ptr共享✅✅有❌weak_ptr不拥有,仅观察✅✅有✅。原创 2025-06-19 10:31:28 · 36 阅读 · 0 评论 -
C++11 移动语义详解
传统的 C++ 在处理对象复制时,通常会调用拷贝构造函数或拷贝赋值运算符,进行深拷贝操作(deep copy),即复制对象所拥有的资源(如堆内存、文件句柄等)。这种做法虽然安全,但效率低下。而移动语义当一个对象即将被销毁(比如临时对象)时,我们可以“偷走”它的资源,而不是复制它。这种“偷取”资源的行为称为移动操作(move operation),它避免了不必要的资源分配与复制,从而提高效率。问题回答是否合法?✅ 合法,C++11 支持绑定右值引用到临时对象ref = 6;是否允许?原创 2025-06-18 23:54:30 · 51 阅读 · 0 评论 -
C++11、C++14 和 C++17 标准新特性详解
特性C++11C++14C++17auto类型推导✅范围 for 循环✅Lambda 表达式✅✅✅智能指针✅移动语义✅nullptr✅统一初始化{}✅✅constexpr✅✅✅✅数字分隔符✅结构化绑定✅✅✅文件系统库✅。原创 2025-06-18 10:44:47 · 172 阅读 · 0 评论 -
C++ RPC 远程过程调用详细解析
您提供的代码示例展示了RPC的核心优势——通过简单的函数调用形式实现跨网络、跨进程的通信,而开发者几乎不需要处理底层网络细节。这种抽象级别使得分布式系统开发更加高效和可靠。RPC (Remote Procedure Call) 是一种允许程序调用另一台计算机上子程序的协议,而不需要程序员显式编码这个远程交互细节。实际HelloProc()原创 2025-06-14 17:35:46 · 431 阅读 · 0 评论