
C and C++
文章平均质量分 61
C++学习,点点滴滴
十秒耿直拆包选手
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
c++:【C++标准的演化】逐步解决历史遗留问题,从C++11到C++26的改进
本文系统梳理了C++标准从C++11到C++26的演进历程,从技术改进和心理学视角分析了各版本的核心特性。C++11引入的Lambda表达式、智能指针、移动语义等特性显著提升了代码表达力和安全性;C++14/17通过返回类型推导、结构化绑定、文件系统库等改进进一步优化开发体验;C++20/23引入模块、协程、概念编程等现代特性;展望C++26,将新增调试、线性代数等专用模块,并持续优化语言核心特性。文章强调标准演进不仅体现技术进步,更反映了对开发者认知负荷和心理需求的关注,使C++在保持高性能的同时不断提升转载 2025-08-15 21:58:55 · 17 阅读 · 0 评论 -
c++:全面分析C++内存泄漏:你的程序正在悄悄“失血”
C++内存泄漏问题分析与防范指南 内存泄漏是C/C++开发中最常见的问题之一,根源在于其手动内存管理机制。当开发者使用malloc或new申请内存后,若未正确释放,就会导致内存泄漏。本文系统分析了内存泄漏的类型、危害及检测方法: 泄漏类型: 常发性泄漏(每次执行特定代码都会发生) 偶发性泄漏(特定条件下出现) 一次性泄漏(程序初始化时发生) 隐式泄漏(缓存未清理等) 主要危害: 程序性能下降 可能导致崩溃 存在安全隐患 检测方法: 动态检测(Mtrace、Memwatch等工具) 静态分析(BEAM、PC-转载 2025-07-26 08:38:59 · 44 阅读 · 0 评论 -
c++:C++程序崩溃现场破案指南:让 core dump 乖乖交代真相!(转载)
【文章摘要】coredump是程序崩溃时生成的内存快照文件,记录了崩溃现场的关键数据。通过配置系统参数(ulimit -c unlimited)可开启此功能。分析时使用GDB工具,结合bt命令查看调用栈、frame检查变量值,能精准定位空指针、内存泄漏等常见问题。文章通过两个典型崩溃案例(空指针解引用和释放后使用)演示了分析流程,并推荐了智能指针、边界检查等预防措施。掌握coredump分析技巧能有效提升C++程序的调试效率,使开发者具备快速诊断崩溃问题的能力。转载 2025-07-26 08:19:03 · 52 阅读 · 0 评论 -
Qt:信号与槽机制及动态调用
Qt的信号与槽机制概述:信号与槽是Qt的核心通信机制,相比回调函数具有类型安全、松耦合和支持多对多通信等优势。动态调用方法QMetaObject::invokeMethod()允许通过字符串名称调用槽函数或Q_INVOKABLE标记的方法,支持参数传递和返回值处理。调用方式包括同步(DirectConnection)、异步(QueuedConnection)等连接类型,适用于跨线程调用、插件系统等场景。使用时需注意方法名匹配、参数类型支持等事项。示例展示了如何动态调用计算和字符串拼接方法,并处理返回值。转载 2025-07-26 08:05:39 · 40 阅读 · 0 评论 -
Qt:qRegisterMetaType函数使用介绍
Qt中的qRegisterMetaType函数用于向元对象系统注册自定义类型,使其可用于信号槽机制(特别是跨线程通信)和QVariant操作。使用时需先通过Q_DECLARE_METATYPE宏声明类型,再调用qRegisterMetaType进行完整注册。注册类型必须满足公有构造/拷贝构造/析构函数要求,且应在使用前完成注册。常见错误包括未注册、注册顺序错误和类型不匹配等问题。该功能对实现跨线程传递std::shared_ptr等模板类尤为重要。原创 2025-07-25 22:48:37 · 124 阅读 · 0 评论 -
Qt:信号槽的sender、receiver与信号、槽存在父子类关系时注意事项
Qt信号槽连接时出现类型不匹配问题的解决方法:当使用基类指针连接子类特有的槽函数时,会因C++成员函数指针类型不匹配而报错。推荐解决方案包括:1)将槽函数提升为基类虚函数,子类重写实现;2)直接使用子类指针连接;3)使用lambda表达式间接调用子类方法(需注意类型转换安全和对象生命周期)。最佳实践是采用方法1,通过合理设计基类接口实现多态调用,既保证类型安全又符合面向对象设计原则。原创 2025-07-22 08:18:35 · 69 阅读 · 0 评论 -
c++:父类的析构函数定义为纯虚函数注意事项
C++中纯虚析构函数的使用要点:必须将纯虚析构函数声明为"=0"并单独提供实现(即使为空),否则会导致链接错误。这种设计既能使基类成为抽象类,又能确保派生类对象析构时正确调用基类析构函数。与普通纯虚函数不同,纯虚析构函数需要基类提供定义,且派生类无需显式重写。该技术主要用于强制抽象基类实现和多态对象的安全释放,从C++11开始可用override明确析构关系。原创 2025-07-21 23:11:12 · 85 阅读 · 0 评论 -
c++:类型转换函数
C++类型转换运算符允许将类对象转换为其他类型,通过operator type() const形式声明,通常设为const成员函数。这种转换可以隐式进行,但可能导致意外行为,因此C++11引入explicit关键字限制隐式转换。示例展示了MyInt类到int的转换,以及Person类到string的显式转换。建议谨慎使用转换函数,优先采用explicit修饰以避免隐式转换问题,同时注意避免多重转换导致的歧义。转换运算符不同于static_cast等标准类型转换操作符。原创 2025-07-17 19:49:42 · 60 阅读 · 0 评论 -
c++:explicit关键字
摘要:C++中的explicit关键字用于防止构造函数的隐式类型转换。它强制要求显式调用构造函数,避免意外的自动转换问题。对于单参数构造函数或可能引发歧义的场景(如资源管理类),推荐使用explicit以提高代码安全性。C++11还支持对类型转换运算符使用explicit,防止隐式类型转换。通过强制显式构造,explicit使代码意图更清晰,减少潜在错误。原创 2025-07-17 18:58:04 · 58 阅读 · 0 评论 -
c++:#pragma once和#ifndef的区别
C++中防止头文件重复包含的两种机制:传统方法#ifndef通过定义唯一宏名实现跨平台兼容,而#pragma once是非标准但广泛支持的简洁方案。前者严格遵循标准但需手动命名,后者编译效率更高但存在边缘情况失效风险。现代项目推荐优先使用#pragma once,重要库可混合两种方式(双重保护)兼顾可靠性。主流编译器均支持#pragma once,仅在极老旧环境需强制使用#ifndef。原创 2025-07-13 09:21:05 · 42 阅读 · 0 评论 -
Qt:QCustomPlot类介绍
摘要:QCustomPlot是一个基于Qt的高性能图表库,其核心类QCustomPlot继承自QWidget,提供多层次绘图功能。支持多种图表类型(曲线图、柱状图、热力图等),具有双轴系统、交互式操作(缩放/平移/点选)和丰富的样式定制选项。通过分层绘制机制(6个默认图层)实现复杂图表组合,支持实时数据刷新和大容量数据渲染优化。典型应用包括科学可视化、工业监控和金融分析,并提供PDF/PNG导出功能。开发时只需添加图形、设置数据并调用replot()即可实现动态图表,是Qt环境下功能全面的数据可视化解决方案原创 2025-07-12 23:55:15 · 234 阅读 · 0 评论 -
Qt model/view 理解01
在 Qt 中对数据处理主要有两种方式:1)直接对包含数据的的数据项 item 进行操作,这种方法简单、易操作,现实方式单一的缺点,特别是对于大数据或在不同位置重复出现的数据必须依次对其进行操作,如果现实方式改变,则在改动程序过程中还需对数据进行重新编码操作,费工费资源。2)采用 model/view 模型,将数据 -- 模型 -- 视图三者串起来,通过约定的接口保证数据的正确显示和显示方式的多样性,当需要重新调整显示时,只需修改视图,保证接口不变,即可以新 view 显示数据。原创 2023-10-04 20:56:13 · 352 阅读 · 0 评论 -
Qt:主窗体(QMainwindow)初始化注意事项
摘要:在Qt中,使用setAttribute(Qt::WA_DeleteOnClose)可在控件关闭时自动释放资源,通常需在构造函数中设置。但若主窗口使用智能指针管理,则不应使用该属性以避免重复释放。此外,文章还介绍了如何为Qt窗口添加菜单栏和按钮:先声明QMenu和QAction对象,然后在源文件中实例化并设置文本、快捷键等属性,最后将动作添加到菜单中。原创 2025-07-07 13:45:57 · 166 阅读 · 0 评论 -
C++:编译QXlsx库过程
QXlsx是一个用于操作Excel文件的Qt库,可通过GitHub下载。该库支持CMake构建,配置文件要求CMake 3.16+和Qt5/6依赖。项目默认生成静态库,可通过修改CMakeLists.txt中的add_library语句添加SHARED选项来生成动态链接库。配置文件定义了源文件路径、编译选项和安装目标,支持C++11/17标准,并包含Qt核心模块依赖。编译后可根据构建类型(Debug/Release)生成对应的库文件。原创 2025-07-06 21:02:59 · 85 阅读 · 0 评论 -
C++:编译QCustomPlot源码为链接库
摘要:QCustomPlot安装指南:1)从官网下载源码包(选项一或三)和编译脚本(必选选项二);2)解压后将头文件和源文件拷贝至sharedlib-compilation上级目录;3)用Qt Creator打开.pro工程文件,配置QT版本(需包含core、gui等模块);4)选择debug/release模式编译生成动态库(.so/.dll),库文件命名带"d"为调试版。注意.pro文件指定了源码路径为../../qcustomplot.*,版本号为2.1.1。编译完成后即可使用生成原创 2025-07-06 20:49:15 · 60 阅读 · 0 评论 -
Qt:QWaitCondition说明和使用
在主线程中,调用 Send(&packet) 发送后,假如通信线程立即收到回包,在主线程还来不及调用 wait() 的时候,已经先 wakeAll() 了,显然这次唤醒是无效的,但主线程继续调用 wait(),然后一直阻塞在那里,因为该回的包已经回了。由此可见,通过 mutex 把有严格时序要求的代码保护起来,同时把 wakeAll() 也用同一个 mutex 保护起来,这样能保证:一定先有 wait() ,再有 wakeAll(),不管什么情况,都能保证这种先后关系,而不至于摆乌龙。原创 2023-11-03 16:21:01 · 1875 阅读 · 0 评论 -
Qt:win7下Qt5获取桌面截图
os:window7Qt:5.3 //get system desktop and save it as a QPixmap. QScreen* screen = QGuiApplication::primaryScreen(); QDesktopWidget* desktop = QApplication::desktop(); QRect rect = d原创 2014-06-05 16:56:59 · 997 阅读 · 0 评论 -
Qt5 中关于信号槽的改动
Qt5释出对信号/槽的新方法。保证了在编译阶段即可对信号槽使用进行检查,避免了到运行阶段才发现问题的尴尬。现将旧/新的信号槽用法进行回顾总结。Qt4中最常用的信号槽写法:原创 2014-06-04 19:27:21 · 599 阅读 · 0 评论 -
Qt:QFrame类学习笔记
成员函数原型描述构造函数析构函数获取QFrame的框架大小设置QFrame的框架大小获取阴影样式,设置阴影样式,获取框架的形状设置框架的形状获取框架的形状和阴影样式设置框架的形状和阴影样式获取框架线的宽度设置框架线的宽度获取框架中线的宽度设置框架中线的宽度。原创 2023-09-26 23:23:59 · 422 阅读 · 0 评论 -
Qt:Qt线程之QSemaphore(深入理解)
QSemaphore也可以被用来使线程的执行顺序化,和的方法相似。信号量和互斥量的不同在于,信号量可以在同一时间被多于一个的线程访问。在博文中通常将QSemaphore具体使用定义为 生产者/消费者 模式,作者觉得这样子定义可以将的更详细、明白,理解也更容易理解一些。本文详解QSemaphore 线程同步过程中,有两个栗子在这里给大家举一下,看完本文更深入的了解生产者/消费者。文章项目结构:栗子 一、 QSemaphore 线程同步 生产者/消费者调用实现初始化全局变量实现生产者线程。原创 2023-10-28 10:36:04 · 664 阅读 · 0 评论 -
C++:类实例变量的初始化顺序
C++类初始化顺序遵循严格规则:1)成员变量按声明顺序初始化;2)继承时基类优先于派生类成员;3)完整顺序:虚拟基类→普通基类→派生类成员。初始化列表顺序不影响实际初始化顺序,构造函数体最后执行。原创 2025-07-03 13:36:41 · 35 阅读 · 0 评论 -
Qt:创建Application的文件依赖浅析
文件最后在 namespace Ui 中定义继承 Ui_MainWindow 的 MainWindow 类。在使用 QtCreator 创建 Application 程序时,会自动创建 ***.ui 文件,在文件夹 “build-***-Desktop_Qt_***-Debug” 中生成 ui_***.h,***.ui 可以通过 QtDesigner 进行调整,同时还会在 ***.ui 的文件夹内创建一个同名的 c++ 类。这给我们造成很大的疑惑,到底 Qt 是如何生成 UI?在这里我们做简单分析。原创 2023-06-18 16:22:33 · 150 阅读 · 0 评论 -
Qt:QCustomPlot库简介
QCustomPlot是一款基于Qt的高性能C++绘图库,专为二维数据可视化设计。它具有轻量级(仅2个头文件+1个源码文件)、实时处理百万级数据和多图层支持等特点,适用于科学计算、工业监控等场景。核心功能包括:多种图表类型(曲线/柱状/热力图)、交互元素(追踪器/坐标线)、数据容器优化以及PNG/PDF等导出格式。通过OpenGL加速和增量更新等技术实现高效渲染,并提供多图层叠加、自定义绘图元素等高级功能,是替代QtCharts的理想选择。原创 2025-06-28 23:42:00 · 240 阅读 · 0 评论 -
Qt:QCustomPlot库的QCPAxis
QCustomPlot中的QCPAxis组件提供了全面的坐标轴定制功能,支持线性/对数刻度、多坐标系、交互缩放等特性。开发者可通过API精细控制坐标轴范围、刻度系统、标签样式和网格线,同时支持高级功能如信号槽机制和性能优化。典型应用包括双Y轴图表、对数坐标轴等场景,是构建专业数据可视化图表的核心工具。合理使用QCPAxis能创建从简单二维图表到复杂科学可视化等各种数据展示界面。原创 2025-06-28 16:32:34 · 240 阅读 · 0 评论 -
Qt:模态与非模态
模态是指当子窗口弹出时,焦点始终被强行集中于子窗口,只要子窗口不退出,焦点就不会被释放。非模态正好相反。从线程角度讲,模态子窗口的线程是阻塞的,父、子窗口各有一个线程,当创建子窗口时,父线程就被子线程阻塞掉;非模态线程不是阻塞型的,父、子线程可以并行运行。在Qt的模态中,主要用到QDialog的exec()方法:SonDialog dlg(this);int res =原创 2013-06-17 22:39:32 · 787 阅读 · 0 评论 -
Qt:Qt出现“undefined reference to vtable for”原因总结 (转my gallery)
由于Qt本身实现的机制所限,我们在使用Qt制作某些软件程序的时候,会遇到各种各样这样那样的问题,而且很多是很难,或者根本找不到原因的,即使解决了问题,如果有人问你为什么,你只能回答--不知道;今天我在这里列举的问题也是再编写Qt程序时,总是遇到的问题,问题普遍,而答案却不唯一,解释这一个问题的说法很多,往往只适合某一种情况,因为这个错误太笼统了,它就是-- “undefined referen转载 2010-01-08 14:20:00 · 1065 阅读 · 1 评论 -
cmake:动态链接库(dll)的调用
本文介绍了在CMake项目中调用动态链接库(DLL)的完整流程。主要内容包括:1) 动态库文件部署要求(DLL文件需与可执行文件同目录,LIB和头文件按工程结构存放);2) CMake配置关键步骤:设置库搜索路径、查找动态库、链接导入库以及添加头文件路径;3) 特别强调动态库链接必须放在add_executable命令之后。文中提供了完整的CMakeList.txt示例,包含静态/动态库混合调用方案,并附有测试代码验证动态库调用效果。通过清晰的目录结构规划和规范的CMake配置,实现了动态链接库的正确调用。原创 2025-06-22 08:42:05 · 419 阅读 · 0 评论 -
C++:动态链接库(dll)的编写,__declspec 用法详解
本文详细介绍了在Windows平台下使用__declspec编写C++动态链接库(DLL)的完整指南。主要内容包括:1. DLL的基本结构,展示如何通过宏(MYLIBRARY_API)控制符号导入(dllimport)导出(dllexport);2. 详细说明函数、类和变量的导出方法;3. 客户端使用DLL的步骤;4. 高级用法如选择性导出、C风格函数导出和DEF文件替代方案;5. 常见问题解决方案及最佳实践。文章强调统一命名、版本控制、异常安全、内存管理原则和兼容性考虑,为开发者提供全面的DLL编写参考。原创 2025-06-21 21:04:17 · 134 阅读 · 0 评论 -
C++:动态库相关文件
摘要:Windows平台C++动态库开发会生成多种文件:DLL作为主库文件包含可执行代码和数据;LIB分为导入库(提供DLL符号信息)和静态库;PDB存储调试信息;EXP为中间导出文件。DLL支持运行时加载和共享,导入LIB用于隐式链接,PDB辅助调试,EXP处理复杂链接场景。Release模式可关闭PDB生成以减小体积。(149字)原创 2025-06-21 17:31:24 · 273 阅读 · 0 评论 -
cmake:cmakelist常用内容模板
【代码】cmake:cmakelist常用内容模板。原创 2025-06-20 20:49:10 · 124 阅读 · 0 评论 -
Qt:智能指针QScopedPointer使用
摘要:QScopedPointer是Qt中的智能指针,与std::unique_ptr类似,严格管理对象所有权且不可转让。当离开作用域时自动删除对象,其拷贝构造和赋值操作均为私有。示例展示了用QScopedPointer简化资源管理,避免手动delete。初始化方式包括直接初始化(使用new)和reset方法(用于已使用的指针)。但因其不可复制特性,不能用作容器元素。与原始指针代码相比,QScopedPointer版本更简洁且安全。原创 2025-06-18 07:46:09 · 278 阅读 · 0 评论 -
Qt:Qt桌面程序正常退出注意事项
本文介绍了Qt窗体创建和显示的三种方式:直接实例化对象、new创建指针和使用智能指针unique_ptr。注意事项包括:1)当设置Qt::WA_DeleteOnClose时需使用new指针方式;2)使用智能指针时不能同时设置Qt::WA_DeleteOnClose,否则会导致重复释放资源;3)智能指针方式能自动管理资源销毁。每种方式都有适用的内存管理场景,开发者应根据实际需求选择合适的方法。原创 2025-06-14 20:40:51 · 374 阅读 · 0 评论 -
IDE:CLion中header/source文件切换快捷键
快捷键配置原创 2025-06-13 23:22:47 · 161 阅读 · 0 评论 -
C++:共享指针unique_ptr的理解与应用
本文介绍了C++11引入的unique_ptr智能指针特性。unique_ptr通过独占所有权机制确保资源的自动释放,禁止复制但支持移动语义转移所有权。文章详细说明了unique_ptr的创建方法(包括推荐使用make_unique)、适用场景(如独占资源、RAII模式、动态数组管理)及其优缺点(自动释放、异常安全但不支持共享所有权)。相比shared_ptr,unique_ptr更轻量且适用于需要独占资源管理的场景,能有效防止内存泄漏,是C++资源管理的重要工具。原创 2025-05-24 17:26:06 · 833 阅读 · 0 评论 -
C++:继承构造函数,简化子类的构造利器
在C++中,构造函数用于初始化类实例。C++11引入了继承构造函数特性,允许子类直接继承基类的构造函数,无需在子类中显式调用基类构造函数。通过使用using关键字,子类可以继承基类的所有构造函数,简化了代码并减少了冗余。继承构造函数只能继承直接基类的构造函数,且不能用于委托构造函数。如果子类声明了与基类同名的构造函数,继承构造函数将被忽略。这一特性提高了代码的复用性和可维护性。原创 2025-05-20 16:33:48 · 510 阅读 · 0 评论 -
cmake:CMAKE_PREFIX_PATH使用技巧与示例
CMAKE_PREFIX_PATH是CMake中一个重要的环境变量,它用于帮助CMake在配置项目时找到各种依赖项的位置。这个变量尤其在处理那些不在标准位置安装的库时显得非常有用。转载 2025-05-15 16:36:39 · 290 阅读 · 0 评论 -
Qt:QCustomPlot之个性化外观(二)
QCustomPlot可以制作出优美的图表,它提供了大量可以自定义风格的接口。转载 2025-04-24 21:30:07 · 162 阅读 · 0 评论 -
Qt:QCustomPlot之开始(一)
QCustomPlot是Qt的一个小型第三方图表库,支持静态/动态曲线、柱状图、蜡烛图、频谱图等。使用方便,仅需在项目中加入头文件qcustomplot.h和qcustomplot.cpp源文件即可,或者把它当做一个库来添加到项目当中,需要在pro文件加入QCustomPlot 图表类:用于图表的显示和交互QCPLayer 图层:管理图层元素(QCPLayerable),所有可显示的对象都是继承自图层元素。翻译 2025-04-24 21:15:24 · 118 阅读 · 0 评论 -
C++:C++析构函数不设为虚函数会怎样?一个让程序员崩溃的隐形陷阱!
MySQL 连接池的内存缓冲区没释放,最终导致数据库服务崩溃!:日志数据丢失,网络缓冲区堆积,最终导致服务不可用!,而不会去查虚表(vtable)找。🔹 多态基类的析构函数必须是虚函数!,最终可能让程序无法再打开新文件!:子类的析构函数被跳过,资源泄漏!里分配了堆内存或持有资源,就会。的析构函数没有被调用!不是虚函数,编译器直接调用。如果确定类不会被继承,可以用。🔹 养成习惯,避免隐形Bug!)是类的特殊成员函数,用于。在讨论析构函数之前,先回顾。执行时,编译器会检查。在C++中,析构函数(转载 2025-04-15 10:31:40 · 115 阅读 · 0 评论 -
Qt:Qt中的枚举
简单来讲,Qt还是使用一组宏命令来完成枚举量扩展功能的(正如Qt的其他核心机制一样),这些宏包括Q_ENUM,Q_FLAG,Q_ENUM_NS,Q_FLAG_NS,Q_DECLARE_FLAGS,Q_DECLARE_OPERATORS_FOR_FLAGS,Q_DECLARE_FLAGS和Q_DECLARE_OPERATORS_FOR_FLAGS都是和元对象系统无关的,可以脱离Q_FLAG单独使用,事实上这两个宏在Qt4就已经存在(不确定更早是否存在),而Q_FLAG是在Qt5.5版本才加入的;转载 2025-02-28 16:06:33 · 479 阅读 · 0 评论