C++
文章平均质量分 88
嵌入式Jerry
《Yocto项目实战教程》+《定制自己的Linux》作者
- 请关注个人B站,学习更丰富前沿的技术:嵌入式Jerry
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
深度解析 Qt 信号与槽机制 —— 原理、用法与设计哲学全解
在面向对象的编程世界中,不同模块或对象之间需要通信与解耦。C++ 原生语言中,常用回调函数或观察者模式来实现事件通知机制,但这些方式往往存在耦合度高、类型安全性差、可维护性低的问题。原创 2025-06-11 12:39:14 · 1063 阅读 · 0 评论 -
C++每日训练 Day 19:死锁原理与实战剖析(打印机 + 扫描仪模型)
本文深入解析了C++多线程中的死锁问题,通过"打印机+扫描仪"模型生动演示了死锁发生的四个必要条件:互斥、占有并等待、不可抢占和循环等待。文章提供了死锁的代码实现示例,并详细分析了其触发机制。针对死锁问题,作者推荐了四种解决方案:统一加锁顺序、使用C++17的scoped_lock、尝试加锁+超时退出以及RAII资源控制。文中还包含巩固练习题和购书推荐,帮助读者全面掌握死锁的识别、预防与解决方法,提升多线程编程能力。原创 2025-05-26 14:28:36 · 911 阅读 · 0 评论 -
使用 Cutter 反编译 Qt 应用:实战案例与完整流程
本文详细介绍了如何使用开源工具 Cutter 对 Qt 应用程序进行静态分析与反编译。文章首先介绍了 Qt 应用的特点及其在反编译中的挑战与价值,随后以一个小型 Qt 登录对话框为例,逐步演示了从工具安装、程序加载、结构还原、信号槽机制识别、资源文件提取到伪代码阅读与行为还原的完整流程。Cutter 作为 Radare2 的图形界面,支持多种文件格式和丰富的分析功能,适合中小型 Qt 应用的分析。文章还提供了调试 Qt 程序的附加操作,并总结了反编译流程中的关键步骤与技术点,最后给出了进一步学习的建议。原创 2025-05-13 11:39:45 · 2739 阅读 · 0 评论 -
C++ 每日训练 · Day 17:只讲一件事 —— 死锁
核心问题说明死锁定义多线程间因互相持锁而无限等待,程序无法继续必要条件互斥、占有且等待、不可剥夺、循环等待实战示例线程交叉访问 log.txt 和 config.json,顺序不同导致死锁避免技巧加锁顺序统一、try_lock、自旋重试、std::lock 等调试方法打日志 + GDB + strace/valgrind/perf 等系统工具分析死锁是多线程系统中的“沉默杀手”,它不会引发异常,却会让程序永久卡住。在设计阶段就统一好资源加锁顺序、合理安排资源持有范围。原创 2025-05-07 11:40:28 · 1121 阅读 · 0 评论 -
C++每日训练 Day 18:构建响应式表单与数据验证(初学者友好)
通过以上步骤,我们实现了一个响应式表单系统,使用协程清晰地表达了异步验证逻辑,避免了传统回调方式带来的复杂性。原创 2025-04-29 17:17:10 · 502 阅读 · 0 评论 -
C++每日训练 Day 17:构建响应式加载动画与异步数据处理
本篇目标是:在 GUI 信号机制基础上,构建一个完整的“点击按钮 → 显示加载动画 → 异步加载数据 → 显示结果”的响应式界面流程。通过协程挂起/恢复机制,实现清晰的异步逻辑,避免回调地狱。原创 2025-04-18 19:09:37 · 545 阅读 · 0 评论 -
C++每日训练 Day 16:构建 GUI 响应式信号机制(面向初学者)
点位说明按钮.onClick发出信号(emit)协程 co_await挂起,等待按钮被点击Dispatcher保证协程 resume 在 GUI 主线程UI逻辑更清晰不再回调地狱,线性协程代码更可维护。原创 2025-04-17 19:49:34 · 524 阅读 · 0 评论 -
C++每日训练 Day 15:构建线程池支持的事件中心 SignalHub(易学版)
);📌 说明:这个类负责让协程挂起,并在合适的时候 resume。关键组件作用ThreadPool处理异步任务的线程池Dispatcher 接口控制协程 resume 到哪个线程协程挂起点,封装 resume 动作事件中心,支持事件挂起 + resume。原创 2025-04-16 15:17:35 · 399 阅读 · 0 评论 -
C++每日训练 Day 15:构建线程池支持的事件中心 SignalHub
通过接入线程池和事件标识,我们实现一个真正可以落地于大型应用(如服务端、UI 框架、游戏引擎)的异步事件调度系统。篇末提供问题与答案帮助巩固理解。原创 2025-04-15 11:50:38 · 528 阅读 · 0 评论 -
C++每日训练 Day 14:线程调度下的异步信号系统设计
在理解协程信号机制基础上,加入线程调度能力,实现一个支持异步 resume 到特定线程(如主线程或线程池)的 Signal/Slot 系统。内容尽量降低门槛,所有示例都附详细注释,配合常见问题解析帮助你一步步构建清晰的异步事件处理系统。原创 2025-04-14 10:52:32 · 1038 阅读 · 0 评论 -
C++每日训练 Day 13:协程驱动的信号机制与异步事件整合实战
协程是一个可以挂起(suspend)和恢复(resume)执行状态的函数。T value;更轻量适合小型事件驱动协程可自定义 suspend 行为(以后可接线程调度器)每次 wait() 返回一个 awaitable 对象emit 时恢复所有等待的协程支持多个协程同时等待同一事件功能目标实现方式非阻塞信号等待协程 await 信号封装器 SignalAwaiter信号触发 resume 协程handle.resume() 恢复执行多协程监听。原创 2025-04-13 08:55:17 · 1052 阅读 · 0 评论 -
C++每日训练 Day 12:仿 Qt 信号-槽机制的实现与实战应用
本篇围绕 Qt 编程中最经典的设计之一——**Signal/Slot(信号-槽)机制**进行完整复现与讲解。从原理推导到实战构建,我们将结合 Day 10~11 的回调与观察者经验,逐步实现一个类型安全、生命周期安全、支持弱引用与自动解绑的轻量信号-槽系统,打通事件驱动设计能力。原创 2025-04-12 09:36:01 · 1180 阅读 · 0 评论 -
C++每日训练 Day 11:观察者模式完整实战篇
场景推荐策略原因回调中引用自己类成员weak_ptr+ lock避免对象销毁后回调崩溃被多个回调/对象持有shared_ptr自动管理生命周期自注册方法中引用自身避免使用裸 this临时一次性闭包可直接使用 Lambda + 捕获值简洁高效,不涉及生命周期回调绑定裸指针 = 不稳定地狱,必须规避shared_ptr = 自动资源管理,weak_ptr = 安全弱引用enable_shared_from_this = 安全注册自己的成员函数的利器。原创 2025-04-11 11:47:59 · 835 阅读 · 0 评论 -
原来 C++ 这么简单:每日十题轻松学 (Day 10 智能指针与回调生命周期安全篇)
场景推荐策略原因回调中引用自己类成员weak_ptr+ lock避免对象销毁后回调崩溃被多个回调/对象持有shared_ptr自动管理生命周期自注册方法中引用自身避免使用裸 this临时一次性闭包可直接使用 Lambda + 捕获值简洁高效,不涉及生命周期回调绑定裸指针 = 不稳定地狱,必须规避shared_ptr = 自动资源管理,weak_ptr = 安全弱引用enable_shared_from_this = 安全注册自己的成员函数的利器。原创 2025-04-10 09:54:53 · 714 阅读 · 0 评论 -
原来 C++ 这么简单:每日十题轻松学 (Day 9 std::function 与回调系统设计篇)
本篇围绕 std::function 为核心,深入探讨其在事件回调、接口抽象、函数封装等实战场景中的用法。结合前一天的函数对象与 Lambda 表达式知识,我们从底层原理出发,逐步构建一个轻量级的可插拔回调机制,帮助你理解类型擦除、参数绑定、函数对象封装的完整思路。原创 2025-04-09 10:57:52 · 1085 阅读 · 0 评论 -
原来 C++ 这么简单:每日十题轻松学 (Day 8 函数对象与 Lambda 表达式实战篇)
本篇专注两个现代 C++ 开发中最常用也最实用的特性:**函数对象(Function Object)** 与 **Lambda 表达式**。以“深入理解 + 贴近实战”为原则,我们通过完整结构、丰富示例和重点解析,让你真正掌握这两种强大的可调用机制,打牢后续事件驱动、函数式编程、策略接口等开发基础。原创 2025-04-08 13:32:44 · 865 阅读 · 0 评论 -
原来 C++ 这么简单:每日十题轻松学 (Day 7 CRTP 与类型萃取篇)
类型萃取用于“在编译期判断某类型是否满足某种结构”是系列的实现基础模板选择(启用/禁用特定函数)编译期报错控制(static_assert)// 是否支持加法的特征检测// CRTP 接口public:} else {public:public:通过void_t+ declval 检测表达式是否合法配合提供“条件编译行为”使用 CRTP 让接口行为自动绑定在派生类上CRTP:模板 + 继承,带来静态多态与零成本内联。原创 2025-04-06 19:07:08 · 473 阅读 · 0 评论 -
原来 C++ 这么简单:每日十题轻松学 (Day 6 模板特化精讲篇)
完全匹配的显式特化 > 偏特化 > 主模板编译器优先选“最具体”的实现模板特化用于“类型特定实现”,优先级最高,语法需显式template<>偏特化用于“部分类型差异”的扩展,是泛型系统强大表达力的核心编译器选择最匹配版本,须理解其选择逻辑推荐配合类型萃取 / traits 实现更强泛型接口你希望我继续 Day 7 深入探讨“模板与继承”、“CRTP 技术”、“类型萃取技巧”吗?我可以将 Day 6 内容进一步精练为讲义图或嵌入项目实战逻辑。原创 2025-04-05 11:26:43 · 402 阅读 · 0 评论 -
原来 C++ 这么简单:每日十题轻松学 (Day 5 模板基础实战篇)
📌 含义:当条件满足时生成此函数,否则该重载被忽略(替代失败但不报错)类型限制按不同类型定制行为(int/float/std::string)增加set()方法重置值增加print()方法:仅当T可用于std::cout时才可用技术点价值与说明函数模板通用算法实现,提高代码复用性类模板泛型容器和工具类的构建基础实例化机制控制生成,支持延迟逻辑与优化SFINAE提供选择性重载,简化约束写法默认模板参数提升接口友好性,减少使用者负担📌模板特化与偏特化。原创 2025-04-04 14:38:13 · 634 阅读 · 0 评论 -
原来 C++ 这么简单:每日十题轻松学 (Day 4 多态与 RTTI 篇)
虚函数用virtual关键字声明,支持运行时多态public:public:类型绑定时机是否支持多态普通函数编译期不支持虚函数运行期支持用子类对象输入基类对象,就会被“切割成基类部分”a.speak();// 只有 Animal 部分,切割了Cat c;print(c);// 调用 Animal::speak()给入参改为引用/指针,防止切割RTTI在运行期获取对象实际类型,仅适用于含虚函数的类:获取类型对象:安全地转换指针。原创 2025-04-03 11:52:44 · 513 阅读 · 0 评论 -
原来 C++ 这么简单:每日十题轻松学(Day 3 构造与对象行为篇 · 完整优化版)
构造有五类,规则别违背;explicit 阻隐转,类型更清晰;列表初始快,赋值反而慢;静态共享数,非成员慎访问;new/delete 成对用,vtable 影响 size;copy 要深拷,move 省资源;成员顺序调,对齐能省钱;析构清资源,异常要注意。原创 2025-04-01 20:21:42 · 1078 阅读 · 0 评论 -
原来 C++ 这么简单:每日十题轻松学(Day 3 构造与对象行为篇 )
构造四大类:默认、有参、拷贝、移动;拷贝慎资源,移动更高效;explicit 防暗转,类型清晰妙;列表初始化,效率安全高;友元慎开放,语义得思考;静态类共享,函数非成员;内存有对齐,对象有顺序;new delete 成对走,异常无析构;规则三与五,管理不可少;delete 明态度,拒绝乱复制。原创 2025-03-31 10:18:44 · 1019 阅读 · 0 评论 -
原来 C++ 这么简单:每日十题轻松学(Day 2 高阶对象篇)
概念要点运算符重载对类重载+ == <<等操作,注意语义一致性继承适合 is-a 关系,构造与析构顺序要理解多态virtual + 指针/引用实现,关键在动态绑定抽象类含纯虚函数不可实例化,是统一接口的工具深拷贝必须处理资源管理,避免野指针与内存重复释放。原创 2025-03-30 20:57:12 · 612 阅读 · 0 评论 -
原来 C++ 这么简单:每日十题轻松学(基础篇 Day 1)
this是类成员函数中的隐含指针,指向调用该函数的当前对象。常用于解决成员变量与参数同名的歧义:this 指向我自己,避免变量冲突起。编译器会将函数代码直接插入调用处,减少函数调用开销;适用于短小、频繁调用的函数。不宜对复杂函数使用内联,否则可能导致代码膨胀。内联小函数,效率大提升。引用是别名,指针能变名;const 修饰谁,看它在谁前;重载靠参数,覆盖靠 virtual;构造来初始化,析构管回收;值传安全慢,引用快速险;默认构造空参数,拷贝复制老对象;原创 2025-03-29 22:15:16 · 862 阅读 · 0 评论 -
高效算法与系统优化:二叉树遍历、HTTPS安全、零拷贝及最大乘积问题解析*
在日常开发和系统优化中,我们经常遇到二叉树的遍历问题、网络通信的安全保障、Linux 下的高效数据传输,以及数组处理的最优解法。本文将系统梳理这些知识点,帮助大家深入理解关键概念,并掌握高效实现方案。二叉树是一种常见的数据结构,在搜索、排序以及表达式解析等领域都有广泛应用。这些机制共同确保 HTTPS 通信的安全性,使用户在传输敏感数据(如密码、支付信息)时更加可靠。等领域都有重要应用,掌握它们将极大提高编程能力和性能优化能力。希望这篇文章能对你有所帮助!给定一个无序数组,包含正数、负数和 0,要求找出。原创 2025-03-18 20:35:22 · 1113 阅读 · 0 评论 -
观察者模式详解:用 Qt 信号与槽机制深入理解
观察者模式是一种一对多的设计模式,允许多个对象(观察者)监听某个对象(被观察者)的状态变化,并在变化时收到通知。简单来说:被观察者(Subject):负责维护一个观察者列表,并在状态发生变化时通知所有观察者。观察者(Observer):接收被观察者的通知并做出相应反应。现实例子:场景被观察者(Subject)观察者(Observer)微信公众号订阅公众号订阅的用户股票市场股票关注股票的投资者UI 界面按钮点击按钮(监听点击的槽函数观察者模式解决了对象间的事件通知问题。Qt。原创 2025-03-18 12:42:31 · 1425 阅读 · 0 评论 -
Qt 关键技术点总结与实践经验
QtCore:提供事件循环、线程管理、文件 I/O、数据结构(如QStringQList)等核心功能。QtGui:底层图形绘制支持,包括 2D/3D 渲染、OpenGL、文本渲染等。QtWidgets:提供传统桌面 GUI 控件,如QLabelQTableView。:基于 QML 语言的 UI 框架,适合快速开发流畅的现代 UI。QtNetwork:提供网络通信能力,如 TCP/UDP、HTTP、WebSocket 等。:支持音视频播放、摄像头、音频录制等功能。原创 2025-03-18 12:37:45 · 798 阅读 · 0 评论 -
深入理解C++编程:从内存管理到多态与算法实现
本文通过一系列经典问题,深入探讨了 C++ 的核心知识点,包括内存管理、多态(结合函数重载与覆盖)、多线程、TCP/IP 模型、软链接与硬链接的区别,以及常见算法实现。每个知识点都配有详细的代码示例和解释,帮助你更好地理解和掌握。希望这些内容能为你的编程学习和项目开发提供帮助!参考资料C++ 官方文档《深入理解计算机系统》本文通过一系列经典问题,深入探讨了 C++ 的核心知识点,包括内存管理、多态(结合函数重载与覆盖)、多线程、TCP/IP 模型、软链接与硬链接的区别,以及常见算法实现。原创 2025-03-17 18:35:14 · 1365 阅读 · 0 评论 -
Qt编程避坑指南:一次说清编译、部署与发布的那些事儿
Qt以其跨平台、高效的特点被广泛用于软件开发,但使用过程中总是难免遇到各种『坑』。本文将全面总结Qt开发和部署过程中常见的几个关键问题,并给出准确的解决方案,助你少走弯路,提升开发效率。原创 2025-03-06 16:50:41 · 1217 阅读 · 0 评论 -
在 Ubuntu 20.04 上交叉编译 Qt 5 应用,使其可在 Windows 运行
Qt 作为一个跨平台的 GUI 框架,支持在 Linux、Windows、macOS 等多个操作系统上运行。Qt 需要与交叉编译工具链匹配,默认的 Qt 版本是针对 Linux 运行的,因此我们需要编译一个 Windows 版本的 Qt 5。首先,确保你的 Ubuntu 20.04 系统已经安装了 Qt 5。如果你希望在没有安装 Qt 的 Windows 电脑上运行。安装完成后,你的 Qt 交叉编译环境就准备好了!,并生成可以直接在 Windows 上运行的。,如果 Qt 依赖项正确,程序应能运行。原创 2025-03-05 18:55:12 · 1557 阅读 · 0 评论 -
在 Ubuntu 20.04 上交叉编译 Qt 5 应用,使其可在 Windows 运行
Qt 作为一个跨平台的 GUI 框架,支持在 Linux、Windows、macOS 等多个操作系统上运行。Qt 需要与交叉编译工具链匹配,默认的 Qt 版本是针对 Linux 运行的,因此我们需要编译一个 Windows 版本的 Qt 5。首先,确保你的 Ubuntu 20.04 系统已经安装了 Qt 5。如果你希望在没有安装 Qt 的 Windows 电脑上运行。安装完成后,你的 Qt 交叉编译环境就准备好了!,并生成可以直接在 Windows 上运行的。,如果 Qt 依赖项正确,程序应能运行。原创 2025-03-05 18:54:18 · 1460 阅读 · 0 评论 -
在 Windows 上最快速安装 Qt 5
下载并安装 Qt 在线安装程序。选择合适的 Qt 版本和编译器(推荐 MinGW)。配置 Qt Creator 和环境变量。使用 Qt Creator 或命令行创建和运行 Qt 项目。避免直接移植 Ubuntu 工程到 Windows,可以通过路径兼容性、库管理和构建工具等方式优化跨平台 Qt 开发。这样,你就可以在 Windows 上顺利进行 Qt 5 开发,而不必依赖 Linux 环境!原创 2025-03-05 18:34:11 · 1840 阅读 · 0 评论 -
构造函数、析构函数、拷贝函数与移动函数概述
移动函数用于“移动”对象的资源,而非复制,通常用于临时对象或需要大数据转移的场景。移动构造和移动赋值操作不会复制资源,而是将资源的所有权转移到新的对象,从而提高性能并避免不必要的资源分配。(如通过传值或赋值操作)时,拷贝构造函数或拷贝赋值运算符会执行,负责将一个对象的状态完整复制到另一个对象中。在C++中,构造函数、析构函数、拷贝函数和移动函数是类对象管理生命周期的关键机制,它们决定了对象的创建、销毁及其在赋值或传递过程中的行为。C++允许构造函数的重载,以处理不同的初始化方式。杂操作中的行为正确且高效。原创 2024-12-10 17:14:36 · 487 阅读 · 3 评论 -
Qt 信号与槽:UI设计的基础
Qt 的信号与槽机制是其最强大的功能之一,也是初学者理解 Qt 的第一步。信号与槽类似于现实生活中的“呼叫和应答”模式:一个对象发出信号,另一个对象响应并执行动作。Qt 的信号与槽机制是 UI 开发的核心。本文从基础到实践,详细讲解了信号与槽的定义、用法以及常见场景。信号与槽是一种基于事件驱动的通信机制。信号与槽不仅是 UI 编程的基础,更是理解 Qt 框架的钥匙。我们创建一个简单的倒计时应用程序,用户点击按钮后,显示从 10 到 0 的倒计时。我们从一个简单的示例入手,帮助你快速理解信号与槽。原创 2024-12-03 13:40:08 · 1749 阅读 · 3 评论 -
QT工程,它该怎么学?
QT工程的学习过程需要理论与实践结合。通过安装QT开发环境、理解工程结构、掌握创建和管理的方法,再加上循序渐进的项目实践,可以逐步掌握QT开发技能。特别是在Linux系统下,QT提供了完善的支持,是跨平台开发的优秀选择。不妨现在就开始创建你的第一个QT项目,体验QT开发的强大与灵活吧!原创 2024-12-02 17:44:34 · 1605 阅读 · 3 评论 -
Qt,如何从零开始入门!
Qt 是一个功能全面的跨平台开发框架,不仅可以用于开发桌面应用,还在嵌入式系统中扮演重要角色。即使没有图形化 IDE(如 Qt Creator),你依然可以使用命令行工具和文本编辑器来快速构建功能强大的应用程序。本文将从手动构建 Qt 项目入手,逐步讲解如何创建、编译和优化一个 Qt 应用,助你快速入门。即使没有图形化的 Qt Creator IDE,你依然可以通过以下方式手动创建 Qt 项目。这是一个简单的 Qt 应用,包含一个按钮,点击按钮时会弹出提示框。编译成功后,会在当前目录生成可执行文件。原创 2024-11-28 14:00:12 · 1424 阅读 · 3 评论 -
Clang-Check:它还有用吗?
是一个简单而高效的工具,适用于快速验证 C/C++ 代码的语法和基础语义问题。虽然clang-tidy的功能更强大,并逐渐成为代码分析和改进的主流工具,仍然在某些特定场景中发挥着重要作用。对于开发者来说,选择使用哪种工具取决于项目需求、开发阶段和所需的分析深度。所以,它还有用吗?答案是肯定的。尽管它的功能有限,但它的轻量性和简洁性使其在需要快速代码验证的场景中仍然是一个值得使用的工具。原创 2024-11-08 10:02:40 · 1123 阅读 · 0 评论 -
神秘的LLVM,熟悉的GNU
LLVM,即 “Low Level Virtual Machine”,最初是作为一个研究项目开始的,旨在提供一种模块化、灵活的编译器基础架构。虽然名字中包含“虚拟机”,但它与传统的虚拟机概念并不相同。如今,LLVM 已经扩展成为一个包含编译器前端、后端、优化工具和调试器的全面工具链。LLVM 的核心是其中间表示(LLVM IR),它是编译过程中一种通用的、低级的语言表达形式。LLVM 的模块化设计允许开发者用其核心库来实现不同的编译器前端和后端,这使得开发新的编程语言编译器变得更加便捷。原创 2024-11-08 09:47:59 · 2008 阅读 · 1 评论 -
Clang-Format:让你的代码整齐划一,格式不再烦恼
在现代软件开发中,代码规范和一致性对团队协作和代码质量至关重要。如何保持代码风格一致,避免手动格式化的繁琐操作?`clang-format` 是一款强大而灵活的代码格式化工具,它为开发者提供了高效的解决方案。本文将详细介绍 `clang-format` 的概念、历史、功能、自动化使用方案(特别是在 VSCode 中),并给出完整的实例。原创 2024-11-07 11:44:47 · 14657 阅读 · 0 评论 -
Clang重要吗?你用过吗?
Clang 工具链包含多个子命令,满足不同的编译和分析需求。子命令用途clang++C++ 编译器前端,类似 g++,专门用于处理 C++ 文件。代码格式化工具,自动调整代码格式,适合团队协作中的代码风格管理。clang-tidy静态分析工具,检测并修复代码中的常见错误和潜在问题,适合代码审查。代码检查工具,在不完全编译的情况下检测语法和结构问题。交互式 AST 查询工具,用于高级代码分析。clangd语言服务器,为 IDE 提供代码补全、跳转、引用查找等功能。原创 2024-11-06 10:36:52 · 1625 阅读 · 0 评论
分享