- 博客(499)
- 资源 (14)
- 收藏
- 关注

原创 c语言链表(插入,删除,更改,查找)
初始化链表int main( ) { int i; struct link // 定义链表的类型 { int data; // 数据区 struct link *next; // 地址区用来存放下一个元素的地址 }; struct link *p = (struct link *) malloc(sizeof(struct link)); // 创建一个头结点 就是指向链表的第一个元素 struct link *te
2021-05-12 23:31:04
5270
16
原创 什么是 std::integral_constant?它解决了什么问题?
std::integral_constant是C++11引入的一个极其基础且关键的模板类,它为编译期常量的表达和传递提供了统一的类型封装机制。理解它,不仅能帮你快速掌握C++11模板元编程的核心思想,还能让你在设计高效、灵活的泛型代码时游刃有余。
2025-05-05 22:03:40
177
原创 什么是std::conditional?它解决了什么问题?
std::conditional是C++11标准库中极具实用价值的类型选择模板,它让我们能够在编译期根据一个布尔条件,选择不同的类型。理解并掌握它,不仅能让你写出更灵活、更安全的泛型代码,。)还能深入体会C++模板元编程的设计哲学和底层机制。
2025-05-05 21:55:58
291
原创 什么是 std::enable_if?为什么它重要?
在C++11时代,模板编程迎来了一个划时代的工具——std::enable_if,它与SFINAE(Substitution Failure Is Not An Error,替换失败非错误)机制结合,极大地丰富了模板的表达能力和灵活性。
2025-05-05 21:39:10
184
原创 一、什么是decltype?它和模板参数推导有什么关系?
decltype,字面意思是“声明类型”,它的作用是根据一个表达式,推导出该表达式的准确类型,而且不会对表达式求值。这和auto不太一样,auto是根据初始化表达式推导变量类型,而decltype是根据任意表达式推导类型。在模板编程中,函数返回类型往往依赖于模板参数,但传统C++写法很难准确推导返回类型。decltype• 它可以精确推导表达式的类型,包括引用、const等修饰符。• 结合尾返回类型(trailing return type)语法,允许在模板函数定义时动态推导返回类型。
2025-05-05 20:24:22
155
原创 什么是std::decay?为什么它重要?
C++11引入的std::decay是一个看似不起眼但极为关键的类型萃取工具,它帮助我们在模板编程中“统一”各种复杂类型,尤其是函数参数的类型表现。
2025-05-05 20:20:46
266
原创 1. std::result_of是什么?为什么它出现?
C++11中的std::result_of是一个专门用来推导函数调用返回类型的模板工具,它解决了在模板编程中“我不知道某个函数对象调用后返回什么类型”的难题。
2025-05-05 20:13:44
246
原创 什么是外联模板(extern template)?
简单来说,C++模板是一种“代码生成器”,编译器在遇到具体类型时才会生成对应的代码,这叫做模板实例化。问题是:
2025-05-05 19:56:20
816
原创 一、C++11随机数库的设计哲学:引擎与分布分离
C++11引入的<random>库,是对传统随机数生成机制的彻底革新,彻底解决了以往rand()函数在可移植性、随机质量和线程安全上的诸多不足。
2025-05-05 19:53:01
187
原创 一、变参模板和std::tuple的本质是什么?
C++11引入的变参模板(Variadic Templates)和以此为基础的std::tuple,是对C++模板编程能力的根本性提升。它们不仅让我们能够优雅地处理任意数量和类型的参数,还极大地丰富了泛型编程的表达力。
2025-05-05 19:39:44
190
原创 一、什么是std::function?为什么C++11要引入它?
C++11引入的std::function,可以说是函数调用机制上的一次质的飞跃。它不仅极大地简化了函数、函数指针、lambda表达式、仿函数(即重载了operator()的类对象)等各种可调用对象的统一管理和调用,也深刻体现了C++设计哲学中“泛化”和“类型擦除”的精髓。
2025-05-05 19:21:19
184
原创 一、emplace_back的本质与设计哲学
C++11引入的emplace_back,是STL容器(尤其是std::vector)中一个极具实用价值的新特性。它的核心优势在于“就地构造元素”,通过直接在容器内部的内存空间构造对象,避免了传统push_back中临时对象的创建、拷贝或移动,从而提升性能和资源利用效率。
2025-05-05 19:09:36
245
原创 一、这三大算法的本质和设计哲学
C++11引入的三个新算法--std::all_of、std::any_of和std::none_of,是对传统循环判断的优雅替代,它们不仅让代码更简洁、更具表达力,还内置了“短路”机制,提升了执行效率。
2025-05-05 19:01:43
274
原创 一、std::chrono的核心理念与三大基石
C++11引入的std::chrono库,是对传统C++时间处理方式的一次根本性革新。它不仅统一了时间与日期的表示和计算,还以模板化设计赋予了极强的灵活性和类型安全,彻底告别了以往依赖C风格时间函数的混乱和不精确。
2025-05-05 18:52:48
230
原创 1. std::regex是什么?为什么C++11要引入它?
C++11引入的std::regex,为C++语言正式带来了标准化的正则表达式支持。这是一个在现代软件开发中极其重要的工具,尤其在文本处理、数据验证、日志分析等领域不可或缺。
2025-05-05 18:44:51
132
原创 1. 设计哲学:非拥有观察者,打破循环引用死结
C++11中引入的std::weak_ptr是智能指针家族中专门用于解决std::shared_ptr循环引用问题的关键工具。它提供了一种“非拥有”的弱引用机制,允许程序观察shared_ptr管理的对象而不增加引用计数,从而避免因循环引用导致的内存泄漏。
2025-05-05 18:00:32
911
原创 1. 设计哲学:共享所有权,自动管理,安全高效
C++11引入的std::shared_ptr是智能指针家族中实现“引用计数共享所有权”的重要成员。它允许多个shared_ptr实例共享同一个对象的所有权,通过内部维护的引用计数机制自动管理对象生命周期,极大简化了动态内存管理,避免了内存泄漏和悬挂指针问题。
2025-05-05 17:53:18
837
原创 1. 设计哲学:独占所有权,自动管理,零开销抽象
C++11中引入的std::unique_ptr是现代C++智能指针家族中的重要成员,代表了“独占所有权”的智能指针。它不仅自动管理动态分配的资源生命周期,避免内存泄漏,更通过独占语义和移动语义,帮助程序员写出更安全、更高效的代码。本文首发于【讳疾忌医-note】公众号,未经授权,不得转载。个人教程网站内容更丰富:(https://www.1217zy.vip/)
2025-05-05 17:45:27
742
原创 1. 设计哲学:让线程“睡觉等待”,避免忙等浪费资源
C++11引入的std::condition_variable是多线程编程中极为重要的同步原语,专门用来协调多个线程之间的等待和通知机制。它解决了线程间“等待某个条件成立再继续执行”的问题,配合互斥锁(std::mutex)使用,能高效且安全地实现线程间通信。本文首发于【讳疾忌医-note】公众号,未经授权,不得转载。个人教程网站内容更丰富:(https://www.1217zy.vip/)
2025-05-05 17:37:54
903
原创 1. 设计哲学:用硬件原子操作替代锁,追求高效且安全的并发
C++11引入的std::atomic是现代C++并发编程中实现无锁线程安全的核心工具。它通过硬件支持的原子操作,保证多线程环境下对共享数据的访问不会产生数据竞争,同时避免了传统锁机制带来的性能开销和死锁风险。本文首发于【讳疾忌医-note】公众号,未经授权,不得转载。个人教程网站内容更丰富:(https://www.1217zy.vip/)
2025-05-05 17:20:52
704
原创 1. 设计哲学:让“锁”变得安全、简洁、自动
C++11引入的std::mutex和std::lock_guard,是现代C++并发编程中保护共享资源、避免数据竞争的核心工具。它们不仅简化了多线程同步的复杂度,还通过RAII设计理念大幅降低死锁和资源泄漏的风险。
2025-05-05 17:14:26
887
原创 1. 设计哲学:让多线程“像写普通代码一样简单”
C++11引入的std::thread,是C++语言首次将多线程支持纳入标准库,提供了一个跨平台、类型安全、易用的原生线程接口。
2025-05-05 17:05:51
662
原创 1. 设计哲学:把错误“揪”到编译期,拒绝“跑起来才发现”
C++11引入的static_assert,即“编译时断言”,是现代C++中极具威力且实用的特性之一。它让程序员能够在编译阶段验证某些条件是否成立,若条件不满足,编译器立刻报错,阻止错误代码进入运行时。这不仅提升了代码的健壮性,也极大地减少了调试和维护成本。
2025-05-05 16:55:30
744
原创 1. 异常规范的历史与设计哲学
C++11引入的noexcept关键字,是对异常规范机制的一次根本性革新。它不仅简化了异常声明的语法,更为程序员提供了更精准的异常行为表达和编译器优化的可能。
2025-05-05 16:45:28
539
原创 1. 什么是内存对齐?为什么要管它?
内存对齐简单来说,就是数据在内存中存放的位置必须满足一定的“地址倍数”规则。比如,4字节的int类型通常要求存放在4的倍数地址上。这样做的原因是:
2025-05-05 16:33:44
2076
原创 1. 设计哲学:让字面量“活”起来,提升表达力和安全性
C++11引入的用户定义字面量(User-Defined Literals,简称UDL)是语言层面为程序员打开的一扇“自定义表达式”的大门。它允许我们为字面量(比如数字、字符、字符串)添加自定义后缀,从而让代码更具语义化、更易读,也能减少重复的转换代码。
2025-05-05 16:28:31
775
原创 1. 设计哲学与核心价值
自定义类型要支持范围for,只需实现begin()和end()接口:public:private:return 0;解析• 只要类实现了begin()和end()(及其const版本),就能被范围for识别。• 这体现了C++的“依赖倒置原则”,容器只需提供迭代接口即可被通用算法和语法支持。C++11范围for循环不仅是语法糖,更是C++现代化设计哲学的体现:通过简洁、安全的接口,减少程序员负担,提高代码质量。
2025-05-05 16:15:11
1120
原创 std::forward是什么?
是C++11中完美转发的核心,它让模板函数能够“忠实地”传递参数的值类别,避免了传统模板编程中常见的性能和语义陷阱。它的底层依赖引用折叠和类型推导机制,体现了C++语言对类型系统的深度掌控。我认为,掌握不仅是掌握一个工具,更是理解现代C++泛型编程精髓的关键。它让我们能够写出既高效又语义准确的代码,推动C++向更安全、更灵活、更性能卓越的方向发展。
2025-05-04 19:15:06
714
原创 std::move是什么?
std::move其实是一个类型转换工具,它告诉编译器:“我不再需要这个对象的当前状态,可以把它当作右值来处理,允许资源‘偷走’”。它本身不做任何内存拷贝或搬迁,只是转换类型,让右值引用生效。
2025-05-04 19:10:33
672
原创 智能指针的设计哲学与核心价值
// filePtr销毁时自动调用FileCloser释放资源return 0;智能指针不仅是内存管理的工具,更是现代C++设计哲学的体现:自动化资源管理、明确所有权语义、提升异常安全性。它们让C++代码更健壮、更易维护,同时保留了高性能和灵活性。真正掌握智能指针,意味着你能从繁琐且易错的手动内存管理中解放出来,把精力放在业务逻辑和算法创新上。智能指针是现代C++程序员不可或缺的武器,是写出高质量代码的关键。
2025-05-04 19:02:50
571
原创 移动构造函数和移动赋值运算符是什么?
简单来说,移动语义就是“资源转移”,让程序避免无谓的深拷贝,提升性能。本文首发于【讳疾忌医-note】公众号,未经授权,不得转载。个人教程网站内容更丰富:(https://www.1217zy.vip/)(加入我的知识星球,免费获取账号,解锁所有文章。https://t.zsxq.com/VZxX7)
2025-05-04 18:14:29
764
原创 什么是=default和=delete?
default优点缺点明确表达设计意图,代码更易读、易维护需要程序员理解特殊成员函数生成规则,初学者有学习成本编译器生成默认函数更高效,利于性能优化误用=delete可能导致接口限制过严,影响灵活性=delete防止错误调用,提升代码安全性旧代码迁移时需要逐步添加,存在兼容性问题支持禁止任意函数调用,不仅限于特殊成员函数过度删除函数可能导致代码复用受限=default。
2025-05-04 18:04:24
860
原创 什么是constexpr?
简单来说,constexpr就是告诉编译器:“我这个变量或函数的值可以在编译时算出来,请帮我提前算好,运行时直接用结果,不用再算了。”
2025-05-04 17:49:35
854
原创 什么是override和final?
•override:告诉编译器“我这函数是重写基类的虚函数”,编译器会帮你检查签名是否完全匹配,避免你写错函数名、参数或遗漏virtual导致的“假重写”问题。•final:告诉编译器“这个虚函数不能再被子类重写了”,或者“这个类不能被继承了”,用来防止后续派生类修改行为,保证设计意图。本文首发于【讳疾忌医-note】公众号,未经授权,不得转载。个人教程网站内容更丰富:(https://www.1217zy.vip/)(加入我的知识星球,免费获取账号,解锁所有文章。优点缺点。
2025-05-04 17:42:25
849
原创 什么是右值引用和移动语义?大白话解释
•右值(Rvalue):临时对象或表达式结果,比如函数返回的临时对象、字面量、表达式结果等。它们没有持久的内存地址,生命周期短暂。•左值(Lvalue):有名字、有地址的对象,比如变量。传统C++中,引用只能绑定到左值(T&),无法直接操作右值。C++11引入了右值引用(T&&),专门绑定到右值,允许我们“窃取”临时对象的资源,而不是拷贝。移动语义就是利用右值引用,实现资源的“移动”而非“复制”,比如把一个大内存块的所有权从一个对象转移到另一个对象,避免昂贵的深拷贝。
2025-05-04 17:16:56
696
原创 变长模板参数是什么?用大白话说
优点缺点支持任意数量和类型的模板参数,极大增强泛型能力递归展开可能导致编译器生成大量代码,增加编译时间和二进制体积类型安全,编译期检查,避免运行时错误递归写法对初学者有一定理解门槛代码简洁,减少重载和重复代码复杂展开逻辑可能导致错误难以调试支持高级模板元编程和库设计过度使用可能导致代码难以维护和阅读变长模板参数不仅是C++11对模板编程的技术升级,更是一种**“编译期多态”的体现**。它让C++模板从“固定参数”迈向“无限扩展”,极大拓宽了泛型编程的边界。
2025-05-04 16:57:24
632
原创 什么是Lambda表达式?用大白话说
Lambda表达式就是“随写随用的匿名小函数”,它没有名字,可以直接写在代码里用,甚至能“顺手抓”你当前函数里的变量来用。简单来说,它就是一种内联的、临时的函数对象,让你不用再写一大堆单独的函数或仿函数类,代码更紧凑、更直观。本文首发于【讳疾忌医-note】公众号,未经授权,不得转载。个人教程网站内容更丰富:(https://www.1217zy.vip/)举个最简单的例子:// 输出6这里,就是一个Lambda表达式,表示一个匿名函数,接收一个参数x,返回x+1。auto f。
2025-05-04 13:27:05
516
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人