- 博客(179)
- 收藏
- 关注
原创 全网首发!!C++20新特性全在这一张图里了
前面我写了C++11、C++14、C++17新特性系列文章,大家可以移步到这里↓↓↓《C++11新特性,所有知识点都在这了!》《C++14新特性的所有知识点全在这儿啦!》《他来了,他来了,C++17新特性精华都在这了》没错,就差C++20新特性了,今天终于出炉啦。目录语言特性比较运算<=>对于 (a <=> b),如果a > b ,则运算结果>0,如果a < b,则运算结果<0,如果a==b,则运算结果等于0,注意.
2021-04-11 19:25:44
1802
原创 c++11新特性,所有知识点都在这了!
这篇文章基本上涵盖了c++11的所有新特性,并有详细代码介绍其用法,对关键知识点做了深入分析,对重要的知识点我单独写了相关文章并附上了相关链接,我还准备了完整版c++新特性脑图,有需要可以去我的gz号回复 “新特性” 下载,见文章最后。auto & decltype关于C++11新特性,最先提到的肯定是类型推导,C++11引入了auto和decltype关键字,使用他们可以在编译期就推导出变量或者表达式的类型,方便开发者编码也简化了代码。 auto:让编译器在编译器就推导出变量的类型,
2020-05-11 20:27:49
1864
原创 GitHub上那些star过千的C++学习仓库与面试资源,我都整理好了!
给大家整理了一份GitHub上star过千的C++学习仓库与面试资源清单。
2026-03-03 19:45:00
169
原创 Google为什么要禁用C++的异常处理
直奔主题,在C++的世界里,异常处理机制一直是争议的焦点。几乎所有C++教材都将异常作为推荐的错误处理方式,标准库也广泛使用异常。然而,科技巨头Google却在其C++风格指南中明确规定:“我们不使用C++异常”。这一决策背后,隐藏着怎样的工程智慧与现实考量?Google的C++代码库规模堪称史诗级——超过十亿行的遗留代码在设计之初并未考虑异常安全性。如果现在引入异常,这些代码将无法正确处理异常传播,可能导致资源泄漏、数据损坏甚至系统崩溃。
2026-03-02 21:48:35
399
原创 关于计算机网络,必须掌握这几个知识点!
/ 小端序内存:78 56 34 12// 网络字节序:12 34 56 78网络字节序统一使用大端序,确保跨平台通信的数据一致性。
2026-03-01 21:01:33
544
原创 std::execution新提案:C++26将如何统一CPU、GPU和NPU的并行编程模型
在异构计算架构中,CPU、GPU与NPU各司其职,但数据在不同设备间频繁迁移导致性能瓶颈。传统编程模型要求开发者手动管理内存拷贝,不仅增加复杂度,还易引发一致性问题。C++26的std::execution新提案为跨设备协同提供了系统级解决方案,让一套代码适应多种加速器。C++17正式引入标准库并行算法,核心是对原有串行算法做「零侵入改造」,仅通过传入执行策略参数,即可实现自动并行化,无需修改算法的业务逻辑。C++20进一步完善了这一体系,引入了。
2026-02-28 20:21:18
512
原创 说一下你遇到过的内存泄漏,你是怎么发现和解决的?
在 C++ 面试中,内存管理是高频考点,而内存泄漏更是重中之重,下面整理了一些常见的内存泄漏发生的场景。
2026-02-27 20:15:00
599
原创 CDN是个啥玩意?用了CDN就一定快?这些坑你踩过吗
技术不仅是会用工具,更是理解工具背后的代价。CDN不是万能药,而是需要精准配置的工具。在决定是否使用CDN时,一定要结合业务场景,避免陷入“为了CDN而CDN”的误区。
2026-02-26 20:43:54
570
原创 如何确保某个函数,在万千线程中只被执行一次?
std::call_once 和 std::once_flag 是现代 C++ 并发编程中不可或缺的工具。它以简洁的 API 封装了复杂的线程同步逻辑,让我们能够专注于业务逻辑本身,而不必担心底层的竞争条件、内存序问题或死锁风险。在实际开发中,当你需要确保某个操作只执行一次时,优先考虑 std::call_once。它不仅能避免手写双重检查锁定的复杂性,还能提供更好的性能和安全性。记住:好的并发代码不是靠手写复杂的锁和条件变量,而是善用标准库提供的工具,让语言和库为你处理底层的细节。
2026-02-25 20:59:55
585
转载 C++教会我的关于编程的七件事,其他语言无一能做到
C++第一次让我感到谦卑,是在凌晨2点17分。我当时在构建一个Python自动化工具,每天夜里要处理数小时的日志文件。它能工作。代码很简洁。也很优雅。但就是慢得让人难受。我记得盯着进度条,心想:这不该是性能的极限吧。于是我用C++重写了核心引擎。相同的逻辑。相同的流程。运行时间从47分钟降到了4分钟以内。那个晚上改变了我对编程的认知。不仅仅是速度,还有对控制、责任的理解,以及代码运行时底层到底发生了什么。我现在仍然主要用Python做自动化,但C++教会我的东西,是其他任何语言都没能迫使我去学习的。
2026-02-15 20:08:45
17
原创 什么是野指针和悬空指针?如何避免?很多人都回答不到点子上
野指针是指未初始化或已被释放但仍然被程序使用的指针。它可能指向任意内存地址,包括那些不属于程序的内存区域。未初始化的指针变量,值为随机垃圾地址指针越界访问导致指向非法内存区域。
2026-02-13 20:44:19
503
原创 字节面试题:vector迭代器都在什么场景下会失效?和内存释放有关系吗?
迭代器失效是指:当 vector 的内部结构发生变化时,原本指向特定元素的迭代器、指针或引用,可能不再指向有效的内存位置或指向错误的元素。
2026-02-12 18:56:20
543
原创 C++未来展望:模块、协程、反射如何改变我们编写代码的方式?还是说C++要被淘汰?
2026年即将到来的 C++26 标准,标志着这门 40 年历史的语言进入全新阶段。模块(Modules)、协程(Coroutines)和静态反射(Static Reflection)三大特性,正从根本上重构 C++ 的代码组织、并发模型和元编程能力。这不是简单的语法糖叠加,而是对 C++ 核心机制的一次系统性重构。编译速度提升 10 倍、异步代码同步写、元编程零样板——C++ 正经历 40 年来最深刻的范式变革。
2026-02-11 21:00:00
1200
原创 分布式锁的三种主流实现方案,90%的面试官都会追问它们的优劣与选型陷阱!
在分布式系统架构中,当多个服务实例需要访问同一共享资源时,分布式锁成为了保证数据一致性的关键机制。从秒杀系统防止库存超卖,到定时任务避免重复执行,再到支付回调防止重复处理,分布式锁的身影无处不在。对于准备后端面试的开发者来说,这几乎是绕不开的话题,而面试官往往会从多个角度进行追问:为什么需要分布式锁?有哪些实现方案?各自的优缺点是什么?如何根据业务场景进行选型?这些问题看似简单,但要让面试官满意,需要对各种方案有深入的理解,能够清晰地阐述其背后的原理和权衡。在单机多线程环境下,我们可以使用 C++ 的。
2026-02-10 20:42:52
299
原创 如何设计一个不允许拷贝,但允许移动的类?
在现代C++编程中,设计"不可拷贝但可移动"的类是一个非常重要的技术模式。这种设计模式特别适用于管理独占资源(如文件句柄、网络连接、动态内存等)的场景,能够显著提升程序的安全性,性能也会很有提升。
2026-02-09 19:31:13
522
原创 sizeof一个空类为什么是1?空基类优化又是什么?全是干货
空基类优化是C++编译器的一种优化技术,允许空类在派生类中不占用任何额外的内存空间,从而减少不必要的内存浪费。当一个类从空基类继承时,编译器可以将空基类子对象的内存空间优化为0字节。// 空类int x;// 若没有EBCO,sizeof(Derived)可能是8(1字节基类 + 3字节填充 + 4字节int)// 实际中sizeof(Derived)通常为4(仅包含int成员)
2026-02-07 20:25:40
612
原创 8个C++性能优化技巧,让你的程序快10倍!
在C++编程的世界里,性能优化不是玄学,而是一门精确的科学。你是否遇到过这样的情况:算法逻辑没问题,但程序运行速度就是上不去?或者,同样的功能,别人的代码比你快好几倍?最近不少同学在准备春招 / 考研复试,也有朋友打算在社招跳槽换一份更好的工作。如果你也在做规划,这段时间其实非常适合静下心来补强技术。如果你的目标是把技术水平拉起来,也想在简历上增加一些真正能说得出口的内容,可以趁这段时间做几个。既能把底层功底练扎实,也能让春招、考研复试、社招面试里遇到的技术问题更从容,有需要的朋友可以移步文末查看。
2026-02-04 19:30:00
336
原创 SFINAE 入门:让编译器帮你做选择
SFINAE 是 “Substitution Failure Is Not An Error” 的缩写,中文可译为“替换失败并非错误”。它是 C++ 模板重载解析过程中的一项关键规则,核心场景是:当编译器对模板参数进行替换(实例化)时,如果出现了某些特定的替换失败,并不会直接导致整个编译过程报错,而是会将该模板从重载候选集中排除,继续尝试匹配其他可用的模板。简单来说,SFINAE 给了编译器一个容错的机会,让它可以在多个模板重载中筛选出唯一合法的匹配,而不是一遇到替换问题就直接终止编译。
2026-02-03 19:45:00
554
原创 C++多态一定要了解这个
多态是面向对象编程的四大特性之一,简单来说就是"同一接口,不同实现"。动态多态(运行时多态):通过虚函数+继承实现静态多态(编译时多态):通过模板、函数重载实现。
2026-02-02 19:04:30
609
原创 C++开发者一定要知道Pimpl技法以及这几个特性
在C++大型项目开发中,头文件的每一次微小改动都可能引发连锁反应,导致整个项目重新编译。PImpl(Pointer to Implementation)惯用法作为经典的"编译防火墙"技术,通过巧妙的设计将接口与实现分离,不仅能够显著提升编译效率,还能增强代码的封装性和可维护性。
2026-01-30 20:52:57
582
原创 手写一个智能指针:从 unique_ptr 到 shared_ptr 的引用计数原理
智能指针是现代 C++ 内存管理的核心工具。RAII 提供了思想基础,unique_ptr 定义了清晰的独占所有权语义,shared_ptr 则通过引用计数实现了安全的共享模型,而 weak_ptr 负责解决循环引用这一经典难题。真正理解并掌握这些智能指针的实现原理,才能在工程实践中写出健壮、高性能、可维护的 C++ 代码。
2026-01-29 19:53:43
686
原创 头文件卫士 #pragma once 与 #ifndef:哪种方式保护你的头文件更好?
在 C++ 开发中,头文件重复包含是一个常见且令人头疼的问题。当多个源文件包含同一个头文件,或头文件之间相互嵌套时,可能导致类型重定义、宏重复声明等编译错误。#ifndef(条件编译)和(编译器指令)。本文将从底层实现机制、编译原理、使用场景等多个维度,对这两种技术进行全面对比分析,帮助开发者根据实际项目需求做出合理选择。
2026-01-28 18:11:01
527
原创 C++引用:别名而已,为何如此关键?奥秘在哪里?
从语言规范的角度看,C++ 标准明确规定:引用是对象的别名,不是独立对象,不占用存储空间。这句话看似简单,却蕴含着深刻的设计哲学。int a = 42;// ref 是 a 的引用ref = 100;// 直接修改 a 的值// 现在 a == 100在这个例子中,ref不是一个新的变量,而是a的另一个名字。无论通过a还是ref访问,操作的都是同一块内存。
2026-01-27 18:11:19
896
原创 代码混淆大赛(IOCCC)里的 C++ 代码能有多变态?
IOCCC是一场狂欢,也是一面镜子。它让我们看到C语言的无限可能,也让我们看到混乱代码的深渊。真正的编程大师不是能写出最复杂的代码,而是能用最简单的方式解决问题。在欣赏IOCCC代码艺术的同时,请记住:可读性是代码的生命线。你的代码写给未来的自己和其他程序员,而不是写给编译器。
2026-01-26 18:04:05
1025
原创 引用占用内存空间吗?
引用在概念上不占内存,但为了能正常工作,编译器可能需要类似指针的实现机制。这也是为什么汇编代码可能完全相同,但语法和语义却完全不同的原因。引用在底层实现上与指针相同,不会占用独立的存储空间来“存储引用本身”。引用是一种特殊的变量别名机制,它的引入可以弥补 C 中指针的部分缺陷。编译器通常将引用实现为指针,底层可能需要指针大小的存储,但这是实现细节。虽然引用本身不占用额外内存,但在某些场景下可能需要额外的存储。编译器可以将引用变量完全优化掉,不在内存中生成实体。引用是编译时的别名机制,不占用独立的存储空间。
2026-01-23 21:08:15
923
原创 new一个对象后,需要判空吗?
注意 main 代码中的部分,在 new 对象之后,使用了 if 语句判断是否为空。C++ 中,new 一个对象后,不需要判断是否为空,如果能执行到下一行,它一定不会是空。如果创建对象失败,它不会返回空,而是会直接抛出异常。
2025-12-30 19:58:07
292
原创 constexpr
不在乎编译时间的话,尽可能用 constexpr 修饰所有的函数,大家有时间可以看看 cpp 的源码,多数成员函数都是使用的 constexpr 修饰。constexpr 还可用于修饰函数,这个函数的返回值会尽可能在编译期间被计算出来,然后作为一个常量,但是如果编译期间不能被计算出,此函数就是被当作一个普通函数处理。通过示例代码及相关注释,就可以看到,能在编译期做 constexpr 就会优先在编译期计算,编译期不行就在运行时计算。关于编译期动作,有必要介绍下 constexpr。
2025-12-26 21:37:15
626
原创 有意思的新特性:void_t
最近发现了一个有意思的特性:void_t。它的原理其实就是利用SFINAE和模板优先找特化去匹配的特性,估计大家应该看示例代码就能明白。看着它很简单,但它搭配SFINAE却可以在模板元编程中发挥巨大作用。
2025-12-23 20:15:00
745
原创 推荐使用C++17新特性optional
之前交流群里看到老王在聊 C++ 的 tuple,说 tuple 非常好用,我在群里向老王推荐使用 optional,但没想到,老王居然不知道 optional,所以我想,有必要输出一篇文章介绍下 optional。希望更多的人都能在开发中用上 optional 这种高级实用的特性。作者:程序喵cpp 学习仓库:GitHub - chengxumiaodaren/cpp-learning。
2025-12-22 19:16:07
853
原创 推荐个 C++ 练习平台
C++ Training Hub 并不是简单的刷题仓库,而是一套完整、系统的 C++ 练习体系。从基础语法到现代 C++ 特性,再到并发和模板编程,覆盖面非常全面。无论是刚入门,还是已经有经验想补齐短板,这个项目都值得花时间完整走一遍。真正坚持做完这些练习,对 C++ 的理解会有一个明显的台阶式提升。
2025-12-18 20:15:00
999
原创 SQLITE问题整理
用过sqlite的朋友都知道,在数据库目录会有xxx.db文件,你可能看到过,其实数据库不只有xxx.db,有时候还会有xxx.db-shm、xxx.db-wal、xxx.db-journal等文件,你有想过这些文件的作用是什么吗?db-wal文件:需要手动开启wal模式,开启wal模式后,数据库修改日志会先写在wal文件中,事务提交后,会写在db文件中,主要用作协调并发访问。db-shm文件:用于共享内存和协调并发访问,存储了数据库连接中的锁信息和同步机制,数据库启用WAL模式后创建,数据库关闭时删除。
2025-12-17 20:45:00
476
原创 C++多线程入门
条件变量是C++11引入的一种同步机制,它可以阻塞一个线程或者个线程,直到有线程通知或者超时才会唤醒正在阻塞的线程,条件变量需要和锁配合使用,这里的锁就是上面介绍的。函数,假如线程函数执行时间较长,此时线程对象的生命周期结束调用析构函数清理资源,这时可能会发生crash,这里有两种解决办法,一个是调用。函数将会阻塞主线程,直到线程函数执行结束,线程函数的返回值将会被忽略。,将线程和线程对象分离,这里需要注意,如果线程已经和对象分离,那我们就再也无法控制线程什么时候结束了,不能再通过。
2025-12-15 20:45:00
744
原创 记录va_list重复使用导致的crash
这里明确说明,arg在vsnprintf后,会变成不确定的状态。所以才有了在Windows上可以正常运行,在iOS上会异常退出的问题。经过分析定位后发现,这里重复使用了va_list并且在vsnprintf后还继续使用了ap,进而导致的crash。通过查看文档:https://port70.net/~nsz/c/c11/n1570.html#7.21.6.8。最近遇到了个奇怪的问题,同样的代码,在Windows 下正常运行,在iOS下必现crash。
2025-12-11 20:32:52
278
原创 Duff‘s device
你可能会问,减少了 while 循环条件的判断,但是增加了 switch 判断的次数,这不也会增加开销吗?直接看一段伪代码,常规的我们循环展开的代码就像这样,step 为 1,在 while 循环中逐个判断条件,如果 count 为 80,那就需要循环 80 次条件判断。Duff’s Device 同样可以应用于任何其他大小的展开循环,不仅仅是上面示例中的 8 的倍数,你也可以改成其他数字。循环展开的基本思想是通过减少循环条件判断的次数来减少循环中执行的指令数量,有时可以减少在循环中花费的时间。
2025-12-10 17:55:36
621
原创 13条大型C++项目编码规范
在大型项目中,代码规范非常重要。特别是同一个团队,同一个项目,一定要有严格的编码规范,团队所有开发人员统一使用同一套编码规范为准则进行开发。它不仅能够保证代码的可读性和可维护性,还能提高开发效率,减少错误的发生。
2025-12-08 20:05:36
761
原创 C++ MCP 服务器实现
这个项目是对跨平台 AI 工具调用的全新解决方案。无论是文件操作、数据库查询,还是 API 调用,借助 MCP 协议,AI 与外部工具的连接都会变得前所未有的简单。通过统一的标准协议,AI 只需要一次实现,即可支持多个平台,彻底告别碎片化的生态!
2025-12-05 17:54:50
900
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅