C++ io_uring的使用小结
目录1. 为什么我们需要 io_uring?2. io_uring 的核心原理:环形缓冲区 (Ring Buffer)3. C++ 中使用 io_uring (liburing)前置准备完整代码示例代码编译4. io_uring 的高级特性A. Submission Queue Polling (SQPOLL)B. 注册文件和缓冲区 (Registered Files/Buffers)C. 链接请求 (IOSQE_IO_LINK)5. C++ 生态中的 io_uring6. i ...
Qt圆角窗口的两种实现方案详解
目录前言:圆角之美方案一:重写paintEvent之法原理剖析代码实现优劣分析应用案例方案二:Qss和QStyleOption原理剖析代码实现关键点说明性能对比表应用案例进阶技巧阴影效果性能优化结语总结前言:圆角之美
✨ 圆角窗口,乃现代UI设计之精髓,去棱角之锋芒,添界面之柔和。Qt框架虽未原生提供圆角窗口,然开发者可自辟蹊径 ...
vs2019+qt工程中如何生成dump文件及调试详解
目录一、调试前置条件二、抓取异常的系统函数区分三、可直接复用的代码:四、调试:总结一、调试前置条件
1、在编译之后,exe和pdb文件均需要发布给用户;
二、抓取异常的系统函数区分
AddVectoredExceptionHandler和SetUnhandledExceptionFilter
AddVectoredExceptionHandler 是“第一现场观察者”,SetUnhandl ...
浅谈C语言中的 #define 宏定义
目录一、无参宏(常量定义/简单文本替换)二、带参宏(类似函数的宏)三、特殊用法:宏拼接与字符串化四、宏定义的高级应用:条件编译五、总结#define 是 C 语言预处理指令,用于在预处理阶段完成文本替换,不占用运行时内存,是实现代码复用、常量定义、简化复杂逻辑的核心工具。它分为 无参宏 和 带参宏 两类,底层依赖预 ...
C++ 类和对象从基础语法到高级特性深度解析
目录一、类的基础认知:定义、访问控制与实例化1.1 类的定义格式1.2 访问限定符:封装的核心实现1.3 类域与成员函数分离1.4 类的实例化1.5 对象大小计算二、this 指针:对象的 “隐藏身份标识”2.1 核心问题2.2 本质与特性2.3 经典面试题解析三、默认成员函数:编译器的 “自动实现”3.1 构造函数:对 ...
一个编译好的Cacti-spine文件,版本1.2.20,用于Linux
官方 只给了源码,我不想每次都编译,应该是可以直接复制到其他的系统上使用
要求
系统架构 / 版本一致:目标系统和编译系统的操作系统版本(如都是 Ubuntu 20.04/ CentOS 7)、CPU 架构(如都是 x86_64)必须完全一致,否则会出现 “无法执行” 或 “缺少库” 的错误。
依赖库必须安装:目标系统不需要编译环境(如 gcc、 ...
【C++】多线程
前言
实现多线程(win32 API、pthread、std::thread)、线程同步(互斥量、原子变量、读写锁、条件变量、线程局部存储)、如何调试。
多线程
线程:是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并 ...
c++中std::tuple、std::pair 、std::tie使用详解
目录基本概念1.std::pair- 二元组基本用法特点应用场景2.std::tuple- 多元组基本用法特点应用场景3.std::tie- 元组绑定(解包工具)基本用法特点应用场景4. C++17 结构化绑定 (Structured Bindings)5、总结对比表6、最佳实践建议核心应用场景1. 从函数返回多个值2. 作为关联容器的键 (Key)3. 函数参数的打包与转发4. 算法中 ...
C++特有的bool变量使用
目录C++中的bool类型bool变量的声明与初始化bool与整型的区别bool在条件表达式中的使用bool与逻辑运算符bool类型转换boolalpha操纵符C++中的bool类型
在C++中,bool是一种基本数据类型,专门用于表示布尔值(真或假)。它是C++语言特有的布尔类型,与C语言中使用整数模拟布尔值的方式不同。
bool变量的声明与初始化
C++中声 ...
C++随机打乱函数的项目实践
目录一、Fisher-Yates洗牌算法核心原理二、std::random_shuffle简化实现与缺陷分析简化源码(核心逻辑)原理层面的致命缺陷三、std::shuffle的现代改进与实现简化源码(核心逻辑)原理层面的关键改进四、随机数生成器工作原理URBG核心组件分布对象的数学转换五、性能与随机性对比六、工程实践建议总结一、Fisher-Yates洗牌 ...
c++中new操作符的具体使用
目录1. 基本用法1.1 分配单个对象1.2 分配数组2.new与malloc的区别 (面试常考)3. 内存分配失败的处理3.1 标准行为(抛出异常)3.2 不抛出异常(std::nothrow)4. 进阶:Placement New (定位 new)5. 常见陷阱:内存泄漏 (Memory Leak)6. 现代 C++ 最佳实践 (C++11 及以后)6.1std::unique_ptr(独占所有权)6.2std::shared_ptr( ...
在C++中正确处理日期字符串排序的方法
目录第一部分:“自定义盒子”——Date结构体第二部分:“日历规则”——自定义比较器第三部分:“实战演练”——结合sort与“规则”第四部分:“X光透 视”——亲眼目睹“规则”被调用“X光”实战(基于d ...
C++中的指针常量、常量指针与常量指针常量详解
目录什么是const关键字?1. 指针常量(Pointer Constant)声明语法代码示例特点总结2. 常量指针(Pointer to Constant)声明语法代码示例特点总结3. 常量指针常量(Constant Pointer to Constant)声明语法代码示例特点总结快速记忆技巧方法一:看const相对于*的位置口诀:“左定值,右定向,两边定都定”方法二 ...
C++中指针变量的使用指南
目录1. 基本概念指针的定义和声明2. 指针的基本操作3. 指针类型空指针悬空指针(野指针)4. 指针运算5. 动态内存分配6. 多级指针7. 指针和函数8. 指针和数组9. const 和指针10. 智能指针(C++11及以上)指针是C++中的一个核心概念,它存储的是内存地址,而不是实际的值。理解指针对于掌握C++编程至关重要。
1. 基本概念
指 ...
C++特殊类设计与类型转换详细代码示例
目录常见的特殊类的设计1.请设计一个类,不能被拷贝2.请设计一个类,只能在堆上创建对象3.请设计一个类,只能在栈上创建对象4. 请设计一个类,不能被继承5.请设计一个类,只能创建一个对象(单例模式)设计模式:单例模式:C++中的类型转换1.C语言中的类型转换2.为什么C++需要四种类型转换3.C++强制类型转换3.1 stacit_cast ...
C++ vector使用以及底层核心剖析
目录一、vector 基础使用1. 头文件与初始化2. 三种遍历方式3. 插入与删除4. 二维 vector(二维数组)5. 实用案例:杨辉三角二、vector 核心接口对比与细节1. reserve:仅扩容,不初始化2. resize:改变元素个数,按需初始化3. 不支持重载 <<和>>三、迭代器失效1. 扩容导致的迭代器失效(野指针)2. 插入 / 删除导致的迭代器 ...
C++实现文本与二进制文件读写操作的示例
目录一、文件操作核心类二、文本文件操作1. 写入文本文件2. 读取文本文件三、二进制文件操作1. 写入二进制数据2. 读取二进制数据四、文件打开模式详解五、错误处理机制六、最佳实践与性能优化1. RAII管理资源2. 高效文件复制3. C++17文件系统操作七、应用案例:日志系统在C++开发中,文件操作是必备技能之一。本文将全面解 ...
C++ 中 operator() 重载与最佳实践
目录C++ 中 operator() 重载详解1. operator() 重载基础概念1.1 函数对象定义1.2 基础示例2. 状态保持的函数对象2.1 计数器实现2.2 累加器实现3. 比较器函数对象3.1 字符串长度比较器3.2 数值比较器4. 算法库中的应用4.1 自定义谓词函数对象4.2 变换函数对象5. 函数对象容器5.1 操作器容器5.2 条件过滤器6. 高级应用场景6.1 ...
C++读取JSON文件的三种方式小结(jsoncpp、nlohmann/json和RapidJSON)
目录为什么需要JSON库?1. jsoncpp - 经典稳定的选择安装与配置基本使用方法2. nlohmann/json - 现代易用的选择安装与配置基本使用方法编译命令3. RapidJSON - 高性能的选择安装与配置基本使用方法编译命令三种库的详细对比性能对比API易用性对比在现代C++开发中,JSON(JavaScript Object Notation)已成为最流行的数据交 ...
三种在C++中高效获取日志文件最后10行的方法
目录准备工作:创建一个测试文件testlog.txt第一部分:方法 1 (“天真”法) —— 读取所有行第二部分:方法 2 (“折中”法) —— 循环缓冲区第三部分:方法 3 (“专业”法) ——seekg反向读取第四部分:“X光透 视”——亲眼目睹“ ...