- 博客(164)
- 资源 (17)
- 收藏
- 关注
原创 C++的左值引用、右值引用以及转发和完美转发
特性左值引用右值引用符号&&绑定对象左值右值主要用途别名、避免拷贝移动语义、完美转发生命周期与被引用对象相同通常用于临时对象可修改性可以修改原对象可以"偷取"资源理解左值和右值引用对于编写高效的现代C++代码至关重要,特别是在资源管理和模板元编程中。转发是指将函数的参数原封不动地传递给另一个函数,保持参数的原始类型和属性。完美转发是指在模板函数中将参数完全保持其原始类型(左值/右值、const/volatile等)传递给另一个函数。
2025-12-17 16:31:13
751
原创 PJSIP中的单通问题以及STUN服务器原理
客户端会同时收集多个候选地址(包括本地地址、STUN发现的地址、TURN中继地址),并通过信令交换这些候选地址,然后通过连通性检查找出最优的传输路径。是指在VoIP通话中,一方能听到另一方的声音,但另一方却听不到这一方的声音。STUN本身并不转发任何语音数据,它只是一个工具,让客户端“自知”,从而在信令中提供正确的、可被对端直接连接的地址。当PJSIP客户端通过STUN服务器获取到自己的公网地址和端口后,它就不会再在SDP中填写自己的私有地址(在现代VoIP系统中(包括PJSIP的典型配置),通常会采用。
2025-12-17 16:26:30
480
原创 使用国内镜像安装 Qt
2025年11月26日 我使用清华镜像死活不行,后来换了 http://mirrors.ustc.edu.cn/qtproject 这个可以了。能够正常进入登录界面,只需要根据选项进行,点击下一步即可。通过cmd或PowerShell打开安装程序所在目录,以命令行的运行。其实Qt的安装程序exe,支持命令行的形式传入参数,指定镜像源地址。下面是常用的国内镜像地址,前面的Qt安装程序也可以从这里下载。使用qt在线安装程序下载速度慢,可以指定国内源。
2025-11-26 23:43:15
640
原创 MFC中一个类的成员变量值自动被篡改:多重继承带来的问题
今天发现一个奇葩的bug:一个类中的某个成员变量的值,在初始化的时候已经赋值为true在这里插入代码片了,可是在使用这个类的时候,发现它的值自动变为了false。我在所有涉及到改变量赋值的地方都打上了断点,打算跟踪看看什么地方导致了重新赋值,可是结果却是没有任何断点被触发。我把ready加了监视,单步调试进去,之前一直是true,但只要已进入的方法,值立马变成了false。担心对象被意外销毁后重建,导致 ready 被重置,又在的构造和析构函数中打上断点,可依旧没有被触发。
2025-10-13 18:06:09
332
原创 设计模式的7大设计原则和GOF 23种设计模式整理
设计模式的7大原则是软件设计的“基石”,核心目标是提高代码的和,降低模块间耦合,让系统更灵活、更易迭代。
2025-09-15 10:26:13
1220
原创 一文看懂访问者模式(Visitor Pattern)
访问者模式通过将操作与对象结构分离,提供了一种灵活的方式来扩展对象的功能。它特别适用于需要对复杂对象结构执行多种不同操作的场景。虽然它有一定的局限性(如添加新元素类型困难),但在合适的场景下,访问者模式可以大大增强代码的可维护性和扩展性。
2025-09-12 10:43:05
894
原创 VS + Qt5 中文乱码/项目设置utf-8编码
确保源文件是编码对MSVC编译器很重要。VS2022默认可能使用本地编码(如GB2312)解析源文件,即使文件以UTF-8保存。/utf-8。
2025-09-10 16:25:43
1390
原创 is-a 和 has-a 简介(C++ )
它们直接影响代码的复用性、可维护性和设计合理性。通过合理区分is-a和has-a,可以设计出更清晰、可维护的代码。是两种核心的设计关系,分别对应。本文通过LongCat 生成。是大多数场景下的最佳实践。
2025-09-08 10:24:22
691
原创 C++中的浅拷贝与深拷贝解析
特性浅拷贝 (Shallow Copy)深拷贝 (Deep Copy)复制内容复制指针(地址)复制指针指向的实际数据内存关系源对象和目标对象的指针成员共享同一块内存源对象和目标对象的指针成员拥有各自独立的内存块默认行为编译器默认提供的拷贝构造函数和赋值运算符需要程序员显式自定义实现风险双重释放、悬空指针、数据意外修改无上述风险,但实现更复杂,性能开销稍大(需要分配和复制内存)适用场景对象没有管理动态分配的内存(例如,只包含int, double等简单类型)对象拥有资源。
2025-09-02 14:56:59
838
转载 vs2015中使用utf-8编码格式
在 VS 2015 中,将文件保存为 UTF-8 格式并确保项目设置支持 UTF-8 编码,可以通过以下步骤完成:
2025-08-28 14:30:56
309
原创 【Deepseek】Windows MFC/Win32 常用核心 API 汇总
掌握常用的API函数是Windows MFC/Win32开发的基础。我为你整理了50个核心且常用的API,并尽力确保了信息的准确性。下面是一个汇总表格,方便你快速了解:🧭 学习和使用建议掌握这些API是Windows编程的基础。除了查阅表格,你还可以:⚠️ 重要提醒这些API是构建Windows应用程序的基石,希望这份列表能对你的学习和开发有所帮助。如果你对某个特定类别(如网络编程、注册表操作等)的API有更深入的兴趣,我可以提供更针对性的信息。
2025-08-28 09:42:11
669
转载 设计模式七大原则
本文介绍了面向对象设计的五大核心原则:1)开闭原则(OCP)强调通过扩展而非修改来增强功能,以迪迦奥特曼类为例展示了抽象类与继承的实现方式;2)单一职责原则(SRP)要求每个类只承担一个功能;3)依赖倒置原则(DIP)提倡面向接口编程,以电脑组装为例说明组件与主机通过抽象接口解耦;4)接口隔离原则(ISP)主张功能接口的单一性;5)里氏替换原则(LSP)指出子类应能完全替代父类。这些原则共同构成了可扩展、低耦合的软件设计基础。
2025-08-22 17:55:38
84
原创 C++ 常见的排序算法详解
排序算法综述 本文系统梳理了常见的排序算法,包括冒泡、选择、插入等比较类排序,以及计数、桶排等非比较类排序。文章从核心思想、实现步骤、复杂度分析等方面详细剖析了每种算法,并提供了C++代码实现。重点分析了各算法的优缺点和适用场景:冒泡排序简单但效率低;选择排序交换次数少但不稳定;插入排序适合小规模数据;希尔排序通过分组提高效率;归并排序采用分治法实现稳定排序。文章强调深入理解排序算法对编程思维和性能优化的重要性,为开发者提供了全面的排序算法参考指南。
2025-08-21 17:48:38
862
原创 23 种设计模式的通俗解释与简单示例(C++不同版本实现)
设计模式是前辈们总结的代码设计经验,目的是让代码更灵活、可复用、易维护。对于新手来说,可以先理解“什么时候用”,再掌握“怎么实现”。下面用通俗易懂的方式讲解23种设计模式,每种都附C++示例(兼顾C++11及以后的现代写法)。通俗解释:一个类只能创建一个对象(比如全局配置、日志器),像国家只有一个总统。核心:私有化构造函数,通过静态方法返回唯一实例。实现1:饿汉式(C++98)(程序启动就创建实例,线程安全,但可能浪费内存)实现2:懒汉式(C++11,线程安全)(用到时才创建,节省内存,C++11静
2025-07-30 14:18:51
939
原创 移动语义和右值引用有什么关系?
C++11引入的右值引用和移动语义是提升程序性能的关键特性。右值引用(&&)通过绑定临时对象标识"可移动资源",而移动语义利用这一机制实现高效资源转移,避免不必要的深拷贝。两者紧密关联:右值引用为移动语义提供语法基础,移动语义则是右值引用的核心应用场景。通过std::move可将左值转为右值引用,触发移动构造或移动赋值操作,实现资源所有权的高效转移。这种机制显著优化了大型对象和资源管理的性能。
2025-07-29 17:12:29
446
原创 如何理解C++11引入的移动语义和它解决的“深拷贝”问题
以的push_back为例:当你把一个vector A插入到另一个vector B中(),默认情况下会发生深拷贝——即复制A中所有元素到B的新内存空间。问题:如果A中的数据量大(比如100万个元素),深拷贝会消耗大量内存和CPU时间,效率很低。更糟的是:如果A之后不再使用,这份拷贝就成了“无用功”,浪费资源。移动语义通过std::move实现了“资源所有权转移”,避免了不必要的深拷贝,尤其适合处理等“包含大块资源”的对象,能显著提升程序性能(减少内存占用和复制开销)。“与其复制,不如转交”
2025-07-29 16:47:05
319
原创 在 Qt 中实现动态切换主题(明亮和暗黑)
对于自定义绘制的控件,监听主题变化并更新样式。Q_OBJECTpublic:protected:// 根据主题绘制背景} else {update();// 触发重绘通过上述步骤,可以实现 Qt 应用程序的动态主题切换功能。模块化管理:使用集中处理样式加载和信号通知。资源嵌入:利用 Qt 资源系统管理 QSS 和图片。信号与槽机制:确保所有控件在主题变化时更新。持久化配置:保存用户偏好提升体验。自定义控件支持:通过重绘事件或信号响应更新样式。
2025-05-21 16:52:59
1034
原创 IFRS/IAS 高频财务术语中英文对照表(含简写)
在这里插入图片描述](https://i-blog.csdnimg.cn/direct/274f3bdbe6994cafbfc5f6182bf15c35.png)
2025-03-25 11:00:51
2351
原创 Qt 中为什么有时候要在 cpp 文件的最后加上 #include “main.moc“
在代码中,添加是为了手动引入由moc生成的元对象代码,确保 Qt 的核心功能(如信号/槽)正常工作。这是单文件 Qt 项目的常见做法,但正式项目中更推荐将声明和实现分离到.h和.cpp文件中。
2025-03-07 10:26:10
1090
原创 lambda 表达式详解
lambda表达式是C++中非常强大和灵活的特性,它可以简化代码,提高代码的可读性和可维护性。通过合理使用捕获列表和参数列表,你可以在需要的地方快速定义匿名函数。// 使用lambda表达式作为比较函数,按降序排序});return 0;在这个例子中,std::sort需要一个比较函数来确定元素的排序顺序,我们使用lambda表达式简洁地定义了这个比较逻辑。
2025-02-06 17:59:37
1303
原创 线程同步时定义 std::mutex 为什么要在前面添加 mutable 关键字
在C++中,关键字用于修饰类的成员变量,表示即使在一个对象中,该成员变量也可以被修改。对于这样的同步原语,使用是必要的,原因如下:通常用于保护类的内部状态,即使在成员函数中,也可能需要加锁来保证线程安全。例如:成员函数的语义:成员函数承诺不会修改对象的状态。的特殊性:本身的状态(如锁的状态)需要被修改,但这并不影响对象的逻辑状态。使用:将声明为,可以在成员函数中修改它,而不会违反的语义。2. 如果不使用 会怎样?如果没有声明为,在成员函数中尝试加锁会导致编译错误:编译器会报错,因为会尝试
2025-02-05 17:22:26
824
原创 实现一个 LRU 风格的缓存类
类似于Windows系统的 win 菜单最近打开功能模块,使用最近最少使用(LRU)的缓存淘汰策略,缓存可以设置最大容量。可以通过维护一个指向每个键在列表中位置的映射,将这一操作的时间复杂度优化到。的操作可能会抛出异常(如内存分配失败),可以考虑添加异常处理机制,让代码在异常情况下能有更好的表现。方法中都有将键移到列表末尾的操作,可以将这一操作提取成一个单独的方法,提高代码的复用性。put:新增或者更新缓存,当容量已满时,删除最早的数据,再插入。参数的检查,避免传入不合法的值(如负数),增强代码的健壮性。
2025-02-05 15:04:06
1402
原创 Qt5 Qt6 版本选择
Qt5: 5.9 LTS 长期支持版本 已于2020年5月31日终止维护,不建议使用及其以前的版本。Qt5: 5.12 LTS 长期支持版本 维护至 2021年12月6日。Qt5: 5.15 LTS 长期支持版本 维护至 2023年5月29日。:Qt4.8.7是Qt4的终结版本,是Qt4系列版本中最稳定最经典的。Qt5.7.0是最后支持xp系统的非长期支持版本。Qt6: 6.2 LTS 长期支持版本。Qt5 : 5.6 LTS 长期支持版本。各版本的 LTS 版本。
2025-01-15 15:45:26
5769
原创 Qt 程序 DPI 适配方法归纳
因此,需要手动设定所有字体大小,一种方法是在 Qt Designer 中编辑目标控件的 stylesheet 将字体尺寸用 px 重新设定。此应用不会缩放 DPI 更改。它将查询 DPI 一次,并在应用的生存期内使用该值。如果 DPI 发生更改,应用将不会调整为新的 DPI 值。当 DPI 与系统值发生更改时,系统会自动纵向扩展或缩减它。此应用不会缩放 DPI 更改,并且始终假定其比例系数为 100% (96 DPI)。此应用在创建 DPI 时检查 DPI,并在 DPI 发生更改时调整比例系数。
2025-01-15 15:34:13
1334
原创 Qt中容器 QVector、QList、QSet和QMap 性能与用途比较
【代码】Qt中容器 QVector、QList、QSet和QMap 性能与用途比较。
2025-01-14 09:52:52
1132
原创 C++ 容器对比汇总 vector deque list forward_list map set multimap unordered_map
【代码】C++ 容器 vector deque list forward_list map set multimap unordered_map 等访问插入性能内存特点存储结构适用场景区别汇总。
2025-01-13 17:38:56
1241
原创 时间复杂度简介
Ofn)ncn0n≥n0fn≤c⋅gn)Ogn))fn3n5nOn)n3n5n35O11)On)nnnOn)Ologn)nlog2nOlogn)On2)nnn−1n−ii2nn−1On2)On3)On2)O2n)FnFn−1Fn−2)F00F11Fn)Fn−1)Fn−2)O2n。
2025-01-10 17:44:41
968
原创 网页代码如何防止用户轻易查看源代码
不过要明白,对于有一定技术能力和足够决心的攻击者来说,这些方法都可能被突破,在涉及到高安全性需求的场景下,还是要结合后端安全机制(如在后端进行真正的加密存储、传输等操作)以及更完善的安全体系来保障数据安全。
2024-12-24 15:13:18
1330
原创 git 删除鉴权缓存及账号信息
Git的配置文件存储了一些账号相关的信息,如用户名和邮箱。你可以通过编辑配置文件来删除或修改这些信息。配置文件通常位于用户目录下的。条目来清除用户信息。不过要注意,这可能会影响到你以后的提交,因为Git提交时通常需要这些信息来标识提交者。如果你的Git仓库是通过SSH认证的,并且你想清除相关的认证缓存,你可以删除或修改。来管理SSH密钥,你可以在终端中运行以下命令来停止。并显示其进程ID,第二条命令。在配置文件中,你可以删除。中删除所有添加的密钥。
2024-12-20 11:19:15
3754
原创 qq浏览器安装 uBlock Origin 广告拦截工具
然后解压 uBlock-Origin.crx.rar。下载 uBlock-Origin.crx。在qq浏览器的应用中心,打开开发着模式。选择刚解压的文件件目录,保存即可。将后缀.crx后增加.rar。点击“加载已解压的扩展程序”
2024-12-19 14:35:59
2756
原创 Visual Stidio 2015 更新3失败解决方案
这个问题是需要安装 vs2015 的更新包,update3 解决。进行安装,到最后还是和之前一样的问题。1.解压缩 iso 文件。安装到最后总会报错。装载之后,打开里面的。3.用管理员权限执行。
2024-12-16 13:46:10
1571
4
Qt 弹出菜单右键菜单 QMenu 设置不同颜色的子项
2024-09-14
源码中文和 Unicode 互转
2017-09-18
源代码电脑通过adb控制安卓手机
2018-03-28
动态捕获Windows窗口句柄工具
2023-02-10
pjsip支持mp3编译库 libpjproject-i386-Win32-vc14-Release
2022-07-28
QT 中使用 Windows API----SendMessage() 进行窗体间消息传递
2017-07-14
QTextEdit 实现 QLineEdit 的 setPlaceholderText() 和 setMaxLength ()函数
2017-07-13
[源码]比较成熟dll导出类示例(包含win32和mfc两种dll以及exe调用示例)
2018-03-20
IBindStatusCallback子类
2018-06-12
MicroSIP 增加 g729 源代码
2016-12-23
Log4Cpp使用实例
2017-02-20
【源代码】phonon-mplayer 后端插件,扩展支持mp4、rmvb、acc等视音频格式
2018-03-31
SocketTool
2015-10-19
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅