C/C++
文章平均质量分 91
云知谷
我是云知,分享我走过的路,专注于从信息的浮云中,为你提炼价值的真相
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【软件测试】《集成测试全攻略:Mock/Stub 原理 + Postman/JUnit/TestNG 实战》
测试多个模块一起工作(比如钢铁侠的战甲 + 美国队长的指挥 + 雷神的闪电,能不能打赢灭霸)。——钢铁侠开战甲,美国队长指挥战术,雷神召唤闪电,才能打败灭霸(系统级问题)。(比如钢铁侠的战甲和美国队长的盾牌不兼容,或者雷神的闪电把战甲炸了),那电影就砸了!,他们各自的能力(功能)都经过了严格测试(单元测试),证明他们“单兵作战”很强。,不仅让你打,还会记录你打了多少次、用什么招式(验证调用行为)。:模块A 写数据,模块B 读数据,但表结构变了,B 就读不到!:测试单个模块(比如钢铁侠的战甲能不能飞)。原创 2025-11-09 18:17:17 · 950 阅读 · 0 评论 -
【C/C++基本功】函数的第一规则是:短小。第二规则是:比第一规则更短小。
函数要短小,不是为了满足某种教条,而是为了让代码清晰、可读、可维护、可测试、可复用。“追求短小,就是在追求代码的优雅与专业。原则说明为什么重要函数第一规则:短小函数应该尽量短,越短越好逻辑清晰、易读、易维护函数第二规则:比第一规则更短小不要满足于“还可以”,要追求“更短、更清晰”追求代码的极致简洁与优雅核心目标让函数逻辑单一、命名清晰、一目了然、易于协作写出像诗一样优雅的代码🔔总结以下这三个核心问题,是理解《代码整洁之道》第三章“函数”与第四章“短小法则”原创 2025-11-08 14:46:21 · 667 阅读 · 1 评论 -
【C/C++基本功】C/C++江湖风云录:void* 的江湖传说
概念本例中的体现void*的作用作为通用数据指针,可以指向任意类型(int、float、字符串等)为什么用void*我们事先不知道用户要存什么类型,所以用通用指针来接纳所有类型如何保证正确使用程序员自己记录类型信息,并在取出时手动转换为正确的指针类型数据安全我们用mallocmemcpy把数据拷贝到盒子内部,避免外部数据失效问题应用场景模拟通用容器、回调参数、自定义数据包装等好的!咱们今天就用最生动、最接地气的方式,带你彻底搞懂 C/C++ 中那个神秘又万能的void*原创 2025-11-04 02:04:49 · 851 阅读 · 0 评论 -
【C基本功】类型转换的奇幻漂流
终极口诀类型转换似变形,自动强制要分清小往大处自动升,大往小处需谨慎强制转换显神通,但有可能伤根本浮变整来砍小数,大变小时防溢命运算之前类型明,避免暗箭伤程序安全第一记心中,调试排错显真功各位少侠,类型转换这门"变形记"绝学,看似简单实则精妙。用得好,如虎添翼;用得不当,bug缠身。记住,在C语言的江湖中,显式优于隐式,安全胜过便捷!愿各位在类型转换的奇幻漂流中,驾驭得当,写出既高效又安全的代码!🚀类型转换实战歌算术运算自动升,小往大处不用愁赋值若是大变小,数据可能要溜走。原创 2025-10-27 19:31:48 · 1528 阅读 · 0 评论 -
【三位一体】智能指针 + 移动语义 + 完美转发:资源管理的黄金三角
优点说明安全智能指针自动管理资源生命周期,杜绝内存泄漏与悬空指针高效移动语义减少深拷贝开销,尤其适合大型动态资源灵活完美转发适配任意参数类型与传递方式,通用性强现代 C++ 核心是 C++11 及后续标准中资源管理、性能优化的基石智能指针、移动语义和完美转发是 C++ 资源管理的三大核心技术,它们相互配合,形成了一个强大的资源管理体系。智能指针提供了资源的自动管理机制,确保资源的安全分配和释放;移动语义实现了资源的高效转移,避免了深拷贝带来的性能开销;原创 2025-10-25 20:07:03 · 389 阅读 · 0 评论 -
【右值引用&完美转发】右值引用与完美转发的“天罡北斗阵”
普通引用(左值引用)T&,只能绑定到左值(有名字、能取地址的对象,比如变量a右值引用T&&,专门绑定到右值(临时对象、即将销毁的对象,比如或🎯右值引用的作用:告诉编译器:“嘿,我这个参数是专门用来接收临时对象(右值)的,你要是传了个临时对象,我就用移动语义高效处理它!优点说明高效传递临时对象(右值)避免不必要的拷贝,直接移动资源,性能拉满保持参数原始身份(左值/右值)通过精准转发,不浪费移动资格通用性强(模板友好)适合写通用包装函数、工厂、代理等高级代码与移动语义完美配合。原创 2025-10-25 19:50:36 · 865 阅读 · 0 评论 -
【移动语义】C++ 移动语义的秘传心法
对决方招式特点结果深拷贝大侠(老 D)每次都自己重新分配内存 + 逐元素拷贝勤劳但笨重,效率低下,累死自己❌ 慢!笨!资源浪费!移动语义(移爷)直接抢走别人已分配好的资源,指针一转,瞬间完成轻功卓绝,资源转移如行云流水,毫不费力✅ 快!省!稳如老狗!🎯结论:能用移动语义,就别用深拷贝!移动语义就是 C++11 给程序员的一把“瑞士军刀”:又快、又省、又安全!原创 2025-10-25 19:09:46 · 992 阅读 · 0 评论 -
【智能指针】智能指针的江湖传说
智能指针你是谁你负责啥一句话传说unique_ptr独行侠我独占、我负责、我释放“我的资源我做主,用完就扔不啰嗦!shared_ptr共享者我们共用,引用计数归零我才放手“大家一起用,最后一人走,资源才释放!weak_ptr观察者我不拥有,我只是静静地看着你“我不插手,不背锅,就看看你过得好不好”场景:你管理的不是普通的new/delete,而是:文件句柄、数据库连接、socket、第三方库资源你希望在智能指针释放时,执行自定义的清理逻辑// 自定义删除器。原创 2025-10-25 16:50:56 · 960 阅读 · 0 评论 -
【C++基本功】C++编程关键基础
int* p;// 经典C++风格,只在强调 p是一个整形指针类型(int*)// 集团推荐的风格,指针、引用都是居中,两边留空格int * p;// 指针int & a = xx;// 左值引用int && a = xx;// 右值引用不论指针的类型是什么,指针本身的内存占用是相同的,64位系统占用8个字节。指针类型存储的是地址编号,本质上是整形,可以进行计算,但对地址的乘除法是没有意义的,加减法是有意义的,表示地址的偏移。p = p + 1;转载 2024-12-08 14:12:41 · 87 阅读 · 0 评论 -
【C++基本功】什么是MVC,QT中的MVC如何实现?
其核心思想是“分离关注点”,通过模型、视图、控制器的协同工作,实现应用程序的可维护性、可扩展性与可测试性。传统MVC中模型与视图分离,Qt MVC进一步强化了这一特性——模型独立于视图,同一模型可绑定多个视图(如同一份数据同时以表格和图表展示),视图修改不影响模型逻辑。,负责将模型中的数据以可视化方式呈现(如列表、表格、树形结构),并接收用户输入(如点击、滚动)。:模型可独立进行单元测试(如测试业务逻辑的正确性),控制器可模拟用户输入进行集成测试,视图的测试可通过自动化工具(如Selenium)完成。原创 2025-10-08 12:54:29 · 774 阅读 · 0 评论 -
【C基本功】sprintf和snprintf
函数是否安全是否检查缓冲区大小是否自动加\0C 标准推荐程度sprintf❌ 不安全❌ 不检查缓冲区大小✅ 会自动加C89 / C90⭐ 不推荐(除非特殊情况)snprintf✅ 安全✅ 检查缓冲区大小✅ 会自动加C99 及以上⭐⭐⭐⭐⭐强烈推荐问题说明缓冲区溢出风险sprintf不检查缓冲区大小,格式化内容太长会写入超出缓冲区范围,造成内存破坏、程序崩溃、安全漏洞不可预测行为一旦溢出,可能覆盖其他变量、函数返回地址,甚至被利用进行攻击(如栈溢出攻击)替代方案。原创 2025-10-13 21:39:01 · 1656 阅读 · 0 评论 -
【嵌入式基本功】单片机嵌入式学习路线
阶段内容目的1C语言基础掌握编程语言核心,为单片机开发打基础2单片机原理入门了解单片机是什么、有什么、怎么用351单片机实战入门级实操,简单易学,快速上手4STM32开发(推荐)主流32位单片机,功能强大,职业发展主流方向5ESP32 / 物联网方向(可选)适合无线通信、智能家居、云连接项目6综合项目实战整合知识,锻炼系统设计、问题解决能力学习单片机时,电路知识是非常重要的基础,尤其是在你开始接触硬件连接、传感器、驱动电路、电源设计等内容时。原创 2025-10-14 19:29:43 · 1293 阅读 · 0 评论 -
【C基本功】柔性数组
特性说明柔性数组成员是结构体的最后一个字段,没有指定大小,如int data[];(C99 标准)或(非标准但常见)用途用于实现“变长结构体”或“动态数组”,数组部分的内存与结构体一起分配内存分配必须一次性为结构体 + 数组部分分配内存,如:访问方式就像普通数组一样使用不能单独分配数组部分柔性数组不占用结构体本身的大小(不包括柔性数组的空间)如果你想实现一个结构体内嵌动态数组,且希望数组和结构体一起分配/释放,推荐使用C99 柔性数组成员int data[];。你可以使用data[0]原创 2025-10-15 19:20:07 · 768 阅读 · 0 评论 -
【C基本功】拿捏#define和typedef
的别名(指向字符的指针),后者是“字符数组”的别名(但通常用作指向字符数组首元素的指针,即字符串)。可以被替换成浮点数,也可以被错误地用于需要整数的地方(编译器可能在后续报错,但错误信息可能指向替换后的位置)。:可以是任何有效的 C 数据类型(基本类型、结构体、联合体、枚举、指针、函数指针等)。预处理器会在源代码中查找指定的标识符(宏名),并将其替换为定义的文本(替换列表)。的区别与适用场景,是编写健壮、可读、可维护的 C 代码的关键技能。:可以是任何文本序列(数字、表达式、代码片段、甚至为空)。原创 2025-10-16 18:58:07 · 617 阅读 · 0 评论 -
【C++内存管理】内存分配的每个层面
C++内存分配的各层级(操作系统接口、、分配器、智能指针)主要聚焦堆内存的动态管理,而栈内存的分配由编译器自动生成的指令独立处理,不涉及这些层级。栈与堆的协作共同构成了C++程序的内存使用体系,但二者分属不同的管理维度。原创 2025-10-16 21:45:47 · 587 阅读 · 0 评论 -
【C++基本功】C++适合做什么,哪些领域适合哪些领域不适合?
领域原因代表产品/场景操作系统 & 驱动直接硬件控制,性能优先Linux 内核、Windows 驱动游戏开发实时性、图形计算要求高Unreal Engine、3A 游戏嵌入式系统资源有限,需高效控制智能家居、汽车电子金融交易极致低延迟高频交易系统图形/音视频计算密集型高性能服务高并发、低开销搜索引擎、数据库桌面软件功能复杂,稳定优先IDE、专业工具C++ 的优势高性能:接近硬件,运行效率高,适合计算密集型任务。控制力强:支持底层内存操作,灵活优化。跨平台。原创 2025-10-19 10:59:17 · 981 阅读 · 0 评论 -
【C++基本功】C++内联函数inline彻底详解
在 C++ 中,通过在函数定义前加上关键字inline,可以建议编译器将该函数作为内联函数处理。编译器可能会// 直接将函数体插入调用处,省去函数调用开销inline关键字只是对编译器的建议,编译器有最终决定权,是否真的进行内联展开。特别是对于复杂函数,编译器可能拒绝内联。项目说明定义方式使用inline关键字修饰函数(通常放在函数声明或定义前)目的减少函数调用的开销,提高程序运行效率原理编译器在调用点将函数体代码直接展开,避免调用过程本质以代码复制(可能增大体积)为代价,省去调用开销编译器行为。原创 2025-10-19 13:34:26 · 805 阅读 · 0 评论 -
【C++基本功】C++隐式转换和显示转换彻底详解
隐式转换是编译器自动完成的类型转换,无需程序员显式编写转换代码。它发生在某些上下文中(如赋值、函数传参、算术运算等),目的是让代码更简洁,但可能隐藏潜在风险。显式转换需要程序员手动编写转换代码,目的是明确意图、避免意外行为。类型是否需要手动干预安全性典型用途示例隐式转换否(自动)低(可能意外)基本类型提升、派生类→基类是(显式)中(编译时检查)相关类型转换(基本类型、类层次)是(显式)高(运行时检查)多态类型的向下转型const_cast是(显式)低(滥用危险)修改。原创 2025-10-19 21:18:13 · 492 阅读 · 0 评论 -
【C++基本功】C++ 选引用与还是指针?彻底详细讲解
引用是变量的一个别名(alias),它为已存在的变量提供了一个新的名称。一旦引用被初始化为某个变量,它就始终指向该变量,不能再引用其他变量。特点引用必须在声明时初始化。引用一旦初始化后,不能改变其绑定的对象(即不能重新绑定到其他变量)。引用本身不占用额外的存储空间(编译器通常将其实现为指针,但对程序员透明)。引用必须引用一个有效的对象,不能为null(不像指针可以为nullptr指针是一个变量,其值为另一个变量的内存地址。通过指针,可以间接访问和操作所指向的变量。特点。原创 2025-10-20 21:33:02 · 840 阅读 · 0 评论
分享