自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(194)
  • 收藏
  • 关注

原创 全网首发!!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 1816

原创 c++11新特性,所有知识点都在这了!

这篇文章基本上涵盖了c++11的所有新特性,并有详细代码介绍其用法,对关键知识点做了深入分析,对重要的知识点我单独写了相关文章并附上了相关链接,我还准备了完整版c++新特性脑图,有需要可以去我的gz号回复 “新特性” 下载,见文章最后。auto & decltype关于C++11新特性,最先提到的肯定是类型推导,C++11引入了auto和decltype关键字,使用他们可以在编译期就推导出变量或者表达式的类型,方便开发者编码也简化了代码。 auto:让编译器在编译器就推导出变量的类型,

2020-05-11 20:27:49 1883

原创 C++依赖关系分析:5个工具理清模块关系

cppdep会检查组件是否正确关联头文件和实现文件,是否存在文件名冲突,头文件包含是否合理,最重要的是它能发现组件之间的循环依赖。CodeViz的安装相对复杂,需要下载特定版本的GCC源码,打上CodeViz的补丁,重新编译GCC。实际项目中,往往会组合使用多个工具。比如用Doxygen生成整体文档,用IWYU优化头文件,用cppdep分析模块依赖,用CodeViz理解关键算法的调用流程。与基于字符串匹配的工具不同,Clang能够理解预处理器的各种指令,包括条件编译、宏展开等,生成的依赖关系更加准确。

2026-04-09 18:19:25 240

原创 资深架构师吐血整理:这11个C++11保命特性如果不了解,一定进不去大厂!

博主介绍:程序喵大人现在的C++大厂面试,根本不听你背书。C++11作为现代C++的基石,面试官不仅要看你知不知道,还要看你有没有在工程里踩过坑!以前写STL迭代器,那长长的一串类型名简直能把手敲断。有了auto,编译器会在编译期自动通过初始值帮你推导出变量的真实类型。👉 使用场景:迭代器类型、Lambda表达式的返回类型、模板编程中复杂的嵌套类型。⚠️ 避坑指南:auto默认会丢弃引用和const属性!如果你想修改原对象,或者想避免庞大对象的拷贝,务必老老实实写上 auto& 或者 const auto

2026-04-08 19:45:00 333

原创 一文讲透Harness编程

模型只负责推理生成;Harness是模型之外的一切——代码、配置、环境、工具、状态、约束、反馈、编排的总和,是让LLM从“文本函数”变成能自主干活的Agent的控制系统。Harness Engineering是为AI Agent设计标准化运行时、约束护栏、工具链、反馈闭环与生命周期管理的工程方法论,目标是让非确定的大模型,在真实业务中实现确定、可控、可审计、可复现的稳定输出。这张图片清晰地展示了 Agent 的构成。中心是作为内核的“大模型”,负责基础的推理和生成。

2026-04-03 20:01:25 410

原创 C++依赖关系分析:5个工具理清模块关系

最近看到很多同学有疑问,有小伙伴问,有没有能理清模块的依赖分析工具,在写项目时, 模块之间藕断丝连,改一个文件引发编译雪崩。其实,这些问题的根源都在于缺乏有效的依赖管理。借着这次机会,我们聊聊5个能帮你理清模块关系的传统C++依赖分析工具。(如果有钱不care token消耗,直接用AI帮你梳理更好)

2026-04-01 22:33:31 446

原创 C++新手必藏!5款在线编译器让你随时随地写代码

各位新入坑的C++玩家们,还在为安装编译器烦恼吗?还在为换电脑找不到代码发愁吗?今天介绍5款神兵利器,让你们告别环境配置的噩梦,随时随地都能写代码!

2026-03-24 20:54:18 391

原创 C++不行了?

分析了C++在2026年的真实现状,指出其并未过时,而是从通用语言转向核心领域语言。在游戏开发、高频交易、嵌入式等方向仍具不可替代性,并结合市场数据与职业前景,给出不同人群的学习建议。

2026-03-23 19:45:00 374

原创 推荐5个编程网站,可以手撕大厂Offer!

推荐5个提升C++编程能力和算法水平的优质平台,包括LeetCode、HackerRank、Codewars、Codeforces和TopCoder,分别从基础训练、算法刷题、竞赛提升等多个维度进行讲解。通过系统练习与实战编码,帮助开发者提升代码能力,应对大厂技术面试,实现从理论到实战的跃迁。

2026-03-19 20:53:09 355

原创 被字节面试官喷了:天天背多态,连虚函数表的内存图都画不出?

深入解析C++多态底层实现机制,重点讲解vtable与vptr原理,并结合单继承与多继承详细拆解对象内存布局及虚函数调用流程。同时分析多态带来的空间与时间开销,包括间接寻址与内联优化受限等性能影响,帮助读者建立底层视角,提升面试与工程实践能力。

2026-03-18 20:14:03 357

原创 OpenClaw的成功是AI Agent的“iPhone时刻”吗?

OpenClaw推动AI从对话走向执行,标志着Agent迈入规模化落地阶段,但在产品体验、安全与生态上仍未达到“iPhone时刻”。当前更像功能机时代的能力验证期,未来随着门槛降低与生态完善,Agent有望成为基础设施级生产力工具。

2026-03-17 21:18:53 484

原创 map的[]运算符,这个看似方便的语法,藏着怎样的魔鬼?

这篇文章深入解析了 std::map 的 operator[] 运算符隐藏行为,说明其在键不存在时会自动插入默认值,可能导致逻辑错误和性能问题。通过对比 operator[]、find、at、insert 等接口,结合典型错误案例,系统总结了 map 在读写场景下的正确使用方式与实践建议,帮助开发者规避隐式插入带来的风险。

2026-03-12 19:45:00 717

原创 C++对异常安全的三个约定

在C++开发中,异常处理是绕不开的话题。但你有没有想过:当异常发生时,你的代码真的安全吗?资源会不会泄漏?对象状态会不会被破坏?程序还能继续运行吗?这些问题背后,藏着一个被很多开发者忽视的核心概念——异常安全保证。

2026-03-11 21:59:56 418

原创 源码剖析:iostream 的缓冲区设计

return c;

2026-03-10 20:32:22 515

原创 struct和class到底有什么区别?问题很简单,但你要回答出这背后的设计意图。

语法层面:唯一区别是默认访问权限和继承方式设计意图:struct强调数据聚合,class强调封装抽象工程实践:根据语义选择,struct用于数据容器,class用于逻辑堡垒。

2026-03-06 19:46:02 390

原创 有了它,C++文件操作再也不难了

组件作用path路径的抽象表示(支持Unicode、自动规范化)目录项(含路径 + 文件状态缓存)目录遍历迭代器space_info文件属性与磁盘空间信息操作函数existscopyremove等std::cout << "文件大小: " << fs::file_size(p) << " 字节" << std::endl;// 时间格式化需要额外处理。

2026-03-05 18:38:18 382

原创 小米二面:std::map和std::unordered_map谁更快?别只知道哈希表

常见问题哈希冲突严重:当不同的键通过哈希函数计算出相同的哈希值时,会落到同一个桶中,导致性能退化哈希函数与相等比较不一致:如果哈希函数和 operator== 的逻辑不一致,会导致查找失败哈希计算耗时过长:对于长字符串等复杂类型,哈希计算的时间可能比查找本身还要长解决方案// 正确的自定义哈希函数示例int age;template<>// 异或结合位移减少碰撞。

2026-03-04 18:47:06 359

原创 GitHub上那些star过千的C++学习仓库与面试资源,我都整理好了!

给大家整理了一份GitHub上star过千的C++学习仓库与面试资源清单。

2026-03-03 19:45:00 428

原创 Google为什么要禁用C++的异常处理

直奔主题,在C++的世界里,异常处理机制一直是争议的焦点。几乎所有C++教材都将异常作为推荐的错误处理方式,标准库也广泛使用异常。然而,科技巨头Google却在其C++风格指南中明确规定:“我们不使用C++异常”。这一决策背后,隐藏着怎样的工程智慧与现实考量?Google的C++代码库规模堪称史诗级——超过十亿行的遗留代码在设计之初并未考虑异常安全性。如果现在引入异常,这些代码将无法正确处理异常传播,可能导致资源泄漏、数据损坏甚至系统崩溃。

2026-03-02 21:48:35 594

原创 关于计算机网络,必须掌握这几个知识点!

/ 小端序内存:78 56 34 12// 网络字节序:12 34 56 78网络字节序统一使用大端序,确保跨平台通信的数据一致性。

2026-03-01 21:01:33 608

原创 std::execution新提案:C++26将如何统一CPU、GPU和NPU的并行编程模型

在异构计算架构中,CPU、GPU与NPU各司其职,但数据在不同设备间频繁迁移导致性能瓶颈。传统编程模型要求开发者手动管理内存拷贝,不仅增加复杂度,还易引发一致性问题。C++26的std::execution新提案为跨设备协同提供了系统级解决方案,让一套代码适应多种加速器。C++17正式引入标准库并行算法,核心是对原有串行算法做「零侵入改造」,仅通过传入执行策略参数,即可实现自动并行化,无需修改算法的业务逻辑。C++20进一步完善了这一体系,引入了。

2026-02-28 20:21:18 558

原创 说一下你遇到过的内存泄漏,你是怎么发现和解决的?

在 C++ 面试中,内存管理是高频考点,而内存泄漏更是重中之重,下面整理了一些常见的内存泄漏发生的场景。

2026-02-27 20:15:00 619

原创 CDN是个啥玩意?用了CDN就一定快?这些坑你踩过吗

技术不仅是会用工具,更是理解工具背后的代价。CDN不是万能药,而是需要精准配置的工具。在决定是否使用CDN时,一定要结合业务场景,避免陷入“为了CDN而CDN”的误区。

2026-02-26 20:43:54 611

原创 如何确保某个函数,在万千线程中只被执行一次?

std::call_once 和 std::once_flag 是现代 C++ 并发编程中不可或缺的工具。它以简洁的 API 封装了复杂的线程同步逻辑,让我们能够专注于业务逻辑本身,而不必担心底层的竞争条件、内存序问题或死锁风险。在实际开发中,当你需要确保某个操作只执行一次时,优先考虑 std::call_once。它不仅能避免手写双重检查锁定的复杂性,还能提供更好的性能和安全性。记住:好的并发代码不是靠手写复杂的锁和条件变量,而是善用标准库提供的工具,让语言和库为你处理底层的细节。

2026-02-25 20:59:55 602

转载 C++教会我的关于编程的七件事,其他语言无一能做到

C++第一次让我感到谦卑,是在凌晨2点17分。我当时在构建一个Python自动化工具,每天夜里要处理数小时的日志文件。它能工作。代码很简洁。也很优雅。但就是慢得让人难受。我记得盯着进度条,心想:这不该是性能的极限吧。于是我用C++重写了核心引擎。相同的逻辑。相同的流程。运行时间从47分钟降到了4分钟以内。那个晚上改变了我对编程的认知。不仅仅是速度,还有对控制、责任的理解,以及代码运行时底层到底发生了什么。我现在仍然主要用Python做自动化,但C++教会我的东西,是其他任何语言都没能迫使我去学习的。

2026-02-15 20:08:45 25

原创 什么是野指针和悬空指针?如何避免?很多人都回答不到点子上

野指针是指未初始化或已被释放但仍然被程序使用的指针。它可能指向任意内存地址,包括那些不属于程序的内存区域。未初始化的指针变量,值为随机垃圾地址指针越界访问导致指向非法内存区域。

2026-02-13 20:44:19 546

原创 字节面试题:vector迭代器都在什么场景下会失效?和内存释放有关系吗?

迭代器失效是指:当 vector 的内部结构发生变化时,原本指向特定元素的迭代器、指针或引用,可能不再指向有效的内存位置或指向错误的元素。

2026-02-12 18:56:20 569

原创 C++未来展望:模块、协程、反射如何改变我们编写代码的方式?还是说C++要被淘汰?

2026年即将到来的 C++26 标准,标志着这门 40 年历史的语言进入全新阶段。模块(Modules)、协程(Coroutines)和静态反射(Static Reflection)三大特性,正从根本上重构 C++ 的代码组织、并发模型和元编程能力。这不是简单的语法糖叠加,而是对 C++ 核心机制的一次系统性重构。编译速度提升 10 倍、异步代码同步写、元编程零样板——C++ 正经历 40 年来最深刻的范式变革。

2026-02-11 21:00:00 1266

原创 分布式锁的三种主流实现方案,90%的面试官都会追问它们的优劣与选型陷阱!

在分布式系统架构中,当多个服务实例需要访问同一共享资源时,分布式锁成为了保证数据一致性的关键机制。从秒杀系统防止库存超卖,到定时任务避免重复执行,再到支付回调防止重复处理,分布式锁的身影无处不在。对于准备后端面试的开发者来说,这几乎是绕不开的话题,而面试官往往会从多个角度进行追问:为什么需要分布式锁?有哪些实现方案?各自的优缺点是什么?如何根据业务场景进行选型?这些问题看似简单,但要让面试官满意,需要对各种方案有深入的理解,能够清晰地阐述其背后的原理和权衡。在单机多线程环境下,我们可以使用 C++ 的。

2026-02-10 20:42:52 329

原创 如何设计一个不允许拷贝,但允许移动的类?

在现代C++编程中,设计"不可拷贝但可移动"的类是一个非常重要的技术模式。这种设计模式特别适用于管理独占资源(如文件句柄、网络连接、动态内存等)的场景,能够显著提升程序的安全性,性能也会很有提升。

2026-02-09 19:31:13 537

原创 sizeof一个空类为什么是1?空基类优化又是什么?全是干货

空基类优化是C++编译器的一种优化技术,允许空类在派生类中不占用任何额外的内存空间,从而减少不必要的内存浪费。当一个类从空基类继承时,编译器可以将空基类子对象的内存空间优化为0字节。// 空类int x;// 若没有EBCO,sizeof(Derived)可能是8(1字节基类 + 3字节填充 + 4字节int)// 实际中sizeof(Derived)通常为4(仅包含int成员)

2026-02-07 20:25:40 628

原创 8个C++性能优化技巧,让你的程序快10倍!

在C++编程的世界里,性能优化不是玄学,而是一门精确的科学。你是否遇到过这样的情况:算法逻辑没问题,但程序运行速度就是上不去?或者,同样的功能,别人的代码比你快好几倍?最近不少同学在准备春招 / 考研复试,也有朋友打算在社招跳槽换一份更好的工作。如果你也在做规划,这段时间其实非常适合静下心来补强技术。如果你的目标是把技术水平拉起来,也想在简历上增加一些真正能说得出口的内容,可以趁这段时间做几个。既能把底层功底练扎实,也能让春招、考研复试、社招面试里遇到的技术问题更从容,有需要的朋友可以移步文末查看。

2026-02-04 19:30:00 374

原创 SFINAE 入门:让编译器帮你做选择

SFINAE 是 “Substitution Failure Is Not An Error” 的缩写,中文可译为“替换失败并非错误”。它是 C++ 模板重载解析过程中的一项关键规则,核心场景是:当编译器对模板参数进行替换(实例化)时,如果出现了某些特定的替换失败,并不会直接导致整个编译过程报错,而是会将该模板从重载候选集中排除,继续尝试匹配其他可用的模板。简单来说,SFINAE 给了编译器一个容错的机会,让它可以在多个模板重载中筛选出唯一合法的匹配,而不是一遇到替换问题就直接终止编译。

2026-02-03 19:45:00 565

原创 C++多态一定要了解这个

多态是面向对象编程的四大特性之一,简单来说就是"同一接口,不同实现"。动态多态(运行时多态):通过虚函数+继承实现静态多态(编译时多态):通过模板、函数重载实现。

2026-02-02 19:04:30 617

原创 C++开发者一定要知道Pimpl技法以及这几个特性

在C++大型项目开发中,头文件的每一次微小改动都可能引发连锁反应,导致整个项目重新编译。PImpl(Pointer to Implementation)惯用法作为经典的"编译防火墙"技术,通过巧妙的设计将接口与实现分离,不仅能够显著提升编译效率,还能增强代码的封装性和可维护性。

2026-01-30 20:52:57 600

原创 手写一个智能指针:从 unique_ptr 到 shared_ptr 的引用计数原理

智能指针是现代 C++ 内存管理的核心工具。RAII 提供了思想基础,unique_ptr 定义了清晰的独占所有权语义,shared_ptr 则通过引用计数实现了安全的共享模型,而 weak_ptr 负责解决循环引用这一经典难题。真正理解并掌握这些智能指针的实现原理,才能在工程实践中写出健壮、高性能、可维护的 C++ 代码。

2026-01-29 19:53:43 702

原创 头文件卫士 #pragma once 与 #ifndef:哪种方式保护你的头文件更好?

在 C++ 开发中,头文件重复包含是一个常见且令人头疼的问题。当多个源文件包含同一个头文件,或头文件之间相互嵌套时,可能导致类型重定义、宏重复声明等编译错误。#ifndef(条件编译)和(编译器指令)。本文将从底层实现机制、编译原理、使用场景等多个维度,对这两种技术进行全面对比分析,帮助开发者根据实际项目需求做出合理选择。

2026-01-28 18:11:01 539

原创 C++引用:别名而已,为何如此关键?奥秘在哪里?

从语言规范的角度看,C++ 标准明确规定:引用是对象的别名,不是独立对象,不占用存储空间。这句话看似简单,却蕴含着深刻的设计哲学。int a = 42;// ref 是 a 的引用ref = 100;// 直接修改 a 的值// 现在 a == 100在这个例子中,ref不是一个新的变量,而是a的另一个名字。无论通过a还是ref访问,操作的都是同一块内存。

2026-01-27 18:11:19 910

原创 代码混淆大赛(IOCCC)里的 C++ 代码能有多变态?

IOCCC是一场狂欢,也是一面镜子。它让我们看到C语言的无限可能,也让我们看到混乱代码的深渊。真正的编程大师不是能写出最复杂的代码,而是能用最简单的方式解决问题。在欣赏IOCCC代码艺术的同时,请记住:可读性是代码的生命线。你的代码写给未来的自己和其他程序员,而不是写给编译器。

2026-01-26 18:04:05 1063

原创 引用占用内存空间吗?

引用在概念上不占内存,但为了能正常工作,编译器可能需要类似指针的实现机制。这也是为什么汇编代码可能完全相同,但语法和语义却完全不同的原因。引用在底层实现上与指针相同,不会占用独立的存储空间来“存储引用本身”。引用是一种特殊的变量别名机制,它的引入可以弥补 C 中指针的部分缺陷。编译器通常将引用实现为指针,底层可能需要指针大小的存储,但这是实现细节。虽然引用本身不占用额外内存,但在某些场景下可能需要额外的存储。编译器可以将引用变量完全优化掉,不在内存中生成实体。引用是编译时的别名机制,不占用独立的存储空间。

2026-01-23 21:08:15 961

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除