- 博客(15)
- 收藏
- 关注
原创 C++ 模板元编程:在编译期写代码是一种怎样的体验?
本文系统介绍了C++模板元编程的核心概念与实用技巧。主要内容包括:1) 模板编译期本质与元函数概念;2) 类型特征检测与操作技术;3) SFINAE机制与enable_if应用;4) 递归实例化与偏特化模式匹配。文章通过阶乘计算、类型列表处理等典型案例,展示了编译期计算的实现方法,并对比了传统模板特化与现代C++20 concepts方案的差异。特别强调了模板元编程的性能影响与可维护性问题,建议优先使用constexpr、if constexpr等新特性,避免过度复杂的模板技巧。
2026-04-05 19:03:17
531
原创 C++ 折叠表达式:“我写递归你写折叠,咱俩代码差十年”
还在用递归展开参数包?写 print(rest...) 写到吐?C++17 带来的折叠表达式,就是来拯救你的。本文从变参模板的基础讲起,手撕递归展开的三大痛点,然后带你彻底搞懂折叠表达式的四种语法、空包陷阱、类型推导、短路行为这些“一不小心就翻车”的细节。
2026-04-01 19:04:07
884
原创 SFINAE 的演进:从替换失败不是错误,到 Concepts 的优雅
从 C++98 到 C++20,SFINAE 从标准中的一句描述,演变为模板元编程的核心技术,最终被 Concepts 优雅替代。本文将按标准演进的时间线,拆解各个时期的关键技巧:sizeof 侦探法、decltype/declval、enable_if、void_t、if constexpr,最后用 Concepts 重写经典案例。无论你是想搞懂老代码,还是拥抱现代 C++,这篇文章都能帮你理清脉络。
2026-03-29 19:04:54
606
原创 C++模板特化:别把“特例”写成“特坑”——从全特化到变量模板
模板特化是C++泛型编程的核心技巧,但它的语法和规则常常让人困惑。本文从基础概念(主模板、特化、实例化)入手,系统讲解类模板的全特化与偏特化、函数模板特化与重载的取舍、C++14变量模板特化的优雅用法,以及特化与继承的设计选择。
2026-03-25 18:47:47
966
原创 告别 C 风格枚举:为什么你应该使用 enum class
C++11引入的enum class解决了传统C风格枚举的四大痛点:1.类型安全,禁止隐式转换为整数;2.作用域隔离,避免名称污染;3.可指定底层类型,确保内存布局;4.支持前向声明,减少编译依赖。enum class通过强类型检查和作用域控制,使枚举成为真正的"一等公民"类型,同时保留了传统枚举的简洁性。使用技巧包括:运算符重载实现位操作、数组+宏实现遍历、switch/X宏处理字符串转换,以及与C代码交互时的类型转换策略。
2026-03-21 18:54:12
531
原创 C++的‘大自然搬运工‘:一文讲透using的所有用法
using 是 C++ 中被低估的多面手:它不仅是命名空间的“搬运工”,还能替代 typedef 定义类型别名、解决继承中的名字隐藏、一键继承构造函数,甚至改变成员的访问权限。C++17 让它能批量引入名字,C++20 又赋予它简化枚举访问的能力。
2026-03-20 19:00:20
632
原创 C++ RAII:从“人肉记账”到“自动保姆”的资源管理革命
还在为手动管理内存、文件句柄、互斥锁而提心吊胆?C语言的“手动挡”式资源释放,不仅代码臃肿,还极易埋下泄漏和死锁的炸弹。而C++的RAII(资源获取即初始化)思想,通过将资源的生命周期绑定到栈对象上,实现了“自动获取、自动释放”的优雅管理。本文从C语言的痛点出发,带你理解RAII的核心原理(栈展开、异常安全),剖析智能指针、文件操作、线程同步三大经典应用场景,并手把手教你实现一个极简RAII包装类。无论你是C++新手还是老手,都能从中体会到RAII的“真香‘’,写出更安全、更简洁的代码。
2026-03-08 19:06:08
634
原创 C++继承、组合、聚合:选错了是屎山,选对了是神器
本文系统解析了C++中继承、组合和聚合三种关系的本质区别与适用场景。继承是"is-a"关系,实现代码复用和多态,但耦合度高;组合是强"has-a"关系,体现独占所有权;聚合是弱"has-a"关系,允许对象独立存在。文章提出实际项目中的六大选择原则:组合优于继承、依赖倒置、分清is-a/has-a、按耦合度排序、多态需求决定继承、生命周期管理决定组合/聚合。
2026-03-07 08:44:19
675
原创 C++引用的“三重门”:左值、右值、万能引用,你真的懂了吗?
C++的引用看似简单,实则暗藏玄机:左值引用有“固定住址”,右值引用专收“流浪汉”,万能引用更是“变脸高手”。本文从值类别聊到引用折叠,从移动语义聊到完美转发,手把手带你拨开迷雾,写出高效又安全的代码。
2026-03-05 18:54:55
923
原创 static 关键字:从 C 到 C++,一篇文章彻底搞懂它的“七十二变”
本文系统梳理了C/C++中static关键字的用法。在C语言中,static有三种主要用途:静态局部变量(保持函数调用间的状态)、静态全局变量(限制文件内可见)和静态函数(限制文件内访问)。在C++中,static扩展为类成员特性,包括静态成员变量(类级别共享数据)、静态成员函数(无this指针的类方法)和静态常量成员(类级别常量)。文章还探讨了静态初始化的陷阱(如初始化顺序问题、线程安全)以及应用场景(单例模式、类计数器)。static的多义性使其成为C++中强大但需要谨慎使用的特性。
2026-03-04 19:00:37
656
原创 std::function 详解:用法、原理与现代 C++ 最佳实践
摘要:std::function是C++11引入的多态函数包装器,能统一存储和调用各种可调用对象(普通函数、lambda、仿函数等)。其核心特性包括类型擦除、拷贝构造和调用操作。使用时需注意空状态检查、性能开销(类型擦除带来间接调用)和返回引用陷阱。典型应用场景包括回调函数、策略模式实现、函数表和线程池任务分发。std::function通过统一接口极大提升了代码灵活性,但需权衡其运行时开销。
2026-03-03 19:01:05
401
原创 C/C++ const:那些年我们一起追过的“常量”,原来有这么多秘密
本文系统介绍了C++中const关键字的多种用法。首先阐述了const修饰变量和常量的特性,并与宏常量进行了对比,指出const在作用域和类型安全方面的优势。重点分析了const与指针的三种组合形式:指向常量的指针、常量指针和指向常量的常量指针。在函数方面,详细说明了const在参数传递和返回值中的应用。最后探讨了类中的const成员函数、const对象、mutable关键字和const静态成员的特性,并对比了const与constexpr在初始化时机、函数调用和指针修饰方面的区别。
2026-03-02 19:01:10
1566
原创 Lambda表达式:从“匿名函数”到“异步保命符”,C++代码优雅与安全兼得
本文详细介绍了C++中Lambda表达式的发展历程和使用方法。从传统的函数指针和仿函数开始,分析了它们的局限性:函数指针无法捕获上下文变量,仿函数代码冗长。Lambda表达式则整合了两者的优点,提供简洁语法、变量捕获能力和高性能。文章重点讲解了Lambda的基本语法、捕获方式(值捕获、引用捕获、this捕获)以及mutable关键字的使用。此外,还探讨了Lambda与标准库算法、智能指针的结合应用,特别是通过shared_ptr解决异步编程中的对象生命周期问题。
2026-03-01 19:04:48
1415
原创 虚函数表:C++ 多态背后的那个男人
本文深入解析了C++虚函数表的实现原理及其在多态中的应用。通过基类指针调用虚函数时,程序通过虚函数表(vtable)实现动态绑定,其中每个有虚函数的类都有一个虚函数表记录函数地址。文章详细分析了单继承和多继承场景下虚函数表的组织方式,包括派生类重写函数时的覆盖机制和新增函数的存储位置。特别探讨了菱形继承问题及其解决方案——虚继承。最后强调了虚析构函数的重要性,确保通过基类指针删除派生类对象时能正确调用所有析构函数。通过地址访问和函数调用示例,直观展示了虚函数表的工作机制。
2026-02-27 20:50:22
416
原创 内存泄漏、悬空指针、双重释放?C++智能指针一键搞定
本文探讨了C++中的内存管理问题,重点介绍了智能指针的使用。传统指针容易出现内存泄漏、悬空指针和双重释放等问题。C++11引入的智能指针通过RAII机制自动管理内存:unique_ptr实现独占所有权,不可拷贝但可移动;shared_ptr通过引用计数实现共享所有权;weak_ptr作为观察者解决循环引用问题。文章还演示了循环引用的场景及解决方案,并介绍了自定义删除器的使用。智能指针能有效避免手动内存管理的风险,是C++现代编程的重要工具。
2026-02-25 22:50:09
718
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅