
C++基础系列
文章平均质量分 85
程序喵大人
从双非走到技术大佬需要多久?人工智能、自动驾驶、音视频、客户端、游戏,都懂点。现任大厂C++高级技术专家。清华大学出版社年度优秀著译者,著译作《C++20高级编程》《C++23高级编程》。微信搜索【程序喵大人】,回复关键字【1】获得十万字C++学习资料。我的微信:cxmdrcpp,欢迎一起进步!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
C++17新特性全在这了!!!
本文详细介绍了C++17标准中引入的所有重要特性。C++17 包含以下新的语言特性:类模板的模板参数推导使用 auto 声明非类型模板参数折叠表达式从花括号初始化列表推导 auto 的新规则按值捕获 this内联变量嵌套命名空间结构化绑定带初始化器的选择语句UTF-8 字符字面量枚举的直接列表初始化[fallthrough]、[nodiscard]、[maybe_unused] 属性类模板参数推导C++17 包含以下新的库特性:std::anystd::apply。原创 2025-04-23 13:19:17 · 1211 阅读 · 0 评论 -
C++基础系列【36】异常处理
虽然C++标准库提供了丰富的异常类,但在某些情况下,开发者可能需要定义自己的异常类。我们可以通过继承基类并重载what方法来实现。示例public:private:");try {// 抛出自定义异常return 0;类继承自并重载了what方法。函数抛出了一个异常,该异常在main函数的catch块中被捕获并处理。注意,这里还添加了一个捕获所有其他子类的catch块,确保能够捕获所有未知异常。noexcept从C++11开始,推荐使用noexcept。原创 2025-04-14 13:26:27 · 614 阅读 · 0 评论 -
50个CPP入门&进阶项目
博主介绍:程序喵大人上这个网站看看呢(Top 50 C++ Project Ideas For Beginners and Advanced [Updated 2025] - GeeksforGeeks),这里总结了50个CPP入门&进阶项目,给你截几个图:英文看起来不方便的话,可以阅读下面的工具翻译版本:CGPA计算器是一个C++程序,用于计算学生的累积平均绩点(CGPA)。用户输入课程数量和每门课程的成绩,程序会显示学生的总课程成绩、总学分、总绩点、学期平均绩点(GPA),并最终生成学生的CGPA。所需原创 2025-04-11 13:42:22 · 2090 阅读 · 0 评论 -
C++基础系列【35】巧用assert
assert字面意思是断言,用于判断是否满足某个条件,如果不满足某个条件,则程序会直接崩溃,控制台上会显示崩溃所在的文件名和行号。示例中我用assert来表示函数func的输入一定要>0。我如果输入了-1,程序运行时会在assert处crashAborted我们一定在assert处只做判断,不要添加任何功能逻辑,因为assert只在debug模式下有作用release模式下,assert这行代码会自动跳过去,会自动被忽略。这种改变了i状态的assert。原创 2025-04-03 16:19:53 · 451 阅读 · 0 评论 -
C++基础系列【34】智能指针
在学习智能指针之前,我们需要了解RAII的概念。原创 2025-04-02 13:48:36 · 865 阅读 · 0 评论 -
C++基础系列【33】使用nullptr而非NULL
因为需要为空指针常量起一个名字,更清晰的表明它表达的是什么含义,就像3.1415926为什么要用π表示一样,尽管宏一直是被各方吐槽的,但为了有名字在当时C++也只能这样,这也是。专为校招、社招3年工作经验的同学打造的1V1 C++训练营,量身定制学习计划、每日代码review,简历优化,面试辅导,已帮助多名学员获得大厂offer!之父一直推崇尽量避免使用它,在实际编程中,可以减少宏的使用,直接使用0。,没有任何其它语义,空指针的活就安排给其它员工,这个员工就是。其实就是一个宏,对于宏,原创 2025-04-01 15:25:05 · 991 阅读 · 0 评论 -
C++基础系列【32】左值、右值详解
万能引用的形式是T&&当T是一个模板参数,且需要进行类型推导时(例如函数模板参数)。当使用auto&&声明变量时。此时T&&或auto&&可以绑定到左值、右值,因此被称为万能引用。原创 2025-03-31 14:32:29 · 1042 阅读 · 0 评论 -
C++基础系列【31】类型转换
对象的指针,可能将基类对象指针转成了派生类对象的指针,这种转换很容易出bug,需要严格审查代码才能消除这种隐患,可C这种转换方式不利于我们审查代码,且程序运行时也可能会出bug。专为校招、社招3年工作经验的同学打造的1V1 C++训练营,量身定制学习计划、每日代码review,简历优化,面试辅导,已帮助多名学员获得大厂offer!完全兼容C语言,C语言的转换方式很简单,可以在任意类型之间转换,但这也恰恰是缺点,因为极其不安全,可能不经意间将指向。),万不得已不要使用,因为不安全,有bug风险。原创 2025-03-28 15:08:39 · 294 阅读 · 0 评论 -
C++基础系列【30】CV关键字
这个函数的返回值会尽可能在编译期间被计算出来当作一个常量,但是如果编译期间此函数不能被计算出来,那它就会当作一个普通函数被处理。字面意思为只读,可用于定义变量,表示变量是只读的,不可以更改,如果更改,编译期间就会报错。的值啊,嗯,确实可以改动而且不报错,但编译器不保证你会得到想要的结果,它会是个。的语义,只保证了运行时不可以被修改,但它修饰的仍然有可能是个动态变量,而。修饰的成员函数中,如果我改动了里面的成员变量的值,编译器会报错。,这时如果我们自定义的函数有改动成员的需求,就需要。原创 2025-03-27 15:32:48 · 915 阅读 · 0 评论 -
C++基础系列【29】volatile关键字
volatile。原创 2025-03-26 13:34:12 · 1038 阅读 · 0 评论 -
C++基础系列【28】string的split
专为校招、社招3年工作经验的同学打造的1V1 C++训练营,量身定制学习计划、每日代码review,简历优化,面试辅导,已帮助多名学员获得大厂offer!方法,至于为什么没有提供,我查了很多资料,网上也有很多说法,但是我依旧没找到比较满意的答案。却不知道怎么实现,可以考虑从以上两种方式中挑一个,我更多的是用第一种。官方没有,但是还经常有这个需求(项目中,平时刷题,都会用到。肯定不是因为难以实现就是了,大概率是因为加了。还有种常见的方式是使用C语言的。),那就只能自己实现一个。这里贴一个我经常在用的一个。原创 2025-03-25 21:04:13 · 372 阅读 · 0 评论 -
C++基础系列【27】Raw String Literal
专为校招、社招3年工作经验的同学打造的1V1 C++训练营,量身定制学习计划、每日代码review,简历优化,面试辅导,已帮助多名学员获得大厂offer!来转义才可以,如果遇到复杂字符串,加那么多转义,又难看,又容易出错(我们想要的是。的作用,你传进去的是什么字符串,它就会输出什么字符串。,它中文名我也不知道怎么翻译更好,但在描述。,但如果没有转义,它却自动变成了换行)。通过它的输出你大体应该也能猜到。而以前使用普通字符串,遇到。时,它非常方便且安全。原创 2025-03-22 22:12:00 · 343 阅读 · 0 评论 -
C++基础系列【26】排序和查找算法
排序与查找算法的重要性不用过多介绍了吧,面试也经常考察。本文将详细介绍常见的排序算法(冒泡、选择、插入、快速、归并、堆排序)、查找算法(顺序查找、二分查找、哈希查找),以及算法的时间复杂度与空间复杂度分析。原创 2025-03-19 14:26:31 · 1174 阅读 · 0 评论 -
C++基础系列【25 】函数对象与谓词
函数对象在C++中比较常用,它允许将函数作为对象来处理,提高代码的灵活性和可复用性。谓词是一种特殊的函数对象,用于返回布尔值。本文介绍相关概念。原创 2025-03-18 10:31:56 · 429 阅读 · 0 评论 -
C++基础系列【24】STL迭代器和算法
迭代器是STL的核心组件之一,它提供了一种统一的方式来遍历容器中的元素。而STL算法库则提供了大量高效的通用算法,方便程序员操作容器中的数据。原创 2025-03-17 15:58:54 · 910 阅读 · 0 评论 -
C++基础系列【23】常用STL介绍
适用于需要将多个不同类型的值组合在一起并返回的场景,如函数返回多个不同类型的值,当然,你也可以用。不会按键的顺序进行排序,而是使用哈希表来实现,因此具有更快的查找、插入和删除操作。是一个关联容器,用于存储键值对,其中每个键都是唯一的,并且会自动按键的升序排序。是C++标准库中的一个固定大小的异类容器,可以将多个不同类型的值组合在一起。是一种基于红黑树实现的有序集合,其中元素是唯一的,且自动按升序排序。是一种基于哈希表实现的无序集合,其中元素是唯一的,但不保证元素顺序。的数组场景,如存储不确定数量的数据。原创 2025-03-13 13:46:28 · 948 阅读 · 0 评论 -
C++基础系列【22】标准库初探
标准库是C++的重要组成部分,它提供了非常丰富的能力,包括输入输出操作、字符串处理、容器、算法、数值运算等多个方面。下面介绍常见的部分。标准库的组件都放在命名空间std中,避免命名冲突。建议在代码中使用前缀,而不是,尤其是在大型项目中。常用的标准库函数比如数学函数,<cmath>头文件提供了许多数学函数。标准输入输出流库(iostream)这个简单看一下,知道有这个东西即可,cout的格式化输入输出太麻烦了,实际工作中很少这样使用。字符串库(string)码字不易,欢迎大家。原创 2025-03-12 14:05:21 · 345 阅读 · 0 评论 -
C++基础系列【21】模板初探
学C++的朋友应该都知道多态,多态分为运行时多态和编译时多态,其中模板可以粗浅理解为是编译时多态的其中一种方式。模板是一种通用的代码框架,允许在编写代码时使用占位符(通常是类型或值),在实际使用时再指定具体的类型或值。使用模板进行泛型编程,可以认为是用一种无关于特定类型的方式来编写代码。模板大体分为函数模板与类模板,其中还有些主要的特性,比如全特化、偏特化、SFINAE等。模板的声明以关键字template开头,后跟模板参数列表。模板参数可以是类型参数(typename或class,现在一般都是使用。原创 2025-03-09 19:23:29 · 686 阅读 · 0 评论 -
C++基础系列【20】数据结构与算法基础
每个节点有零个或多个子节点。没有父节点的节点称为根节点(Root没有子节点的节点称为叶子节点(Leaf除了根节点外,每个节点有且仅有一个父节点。图是由顶点(Vertex)和边(Edge)组成的一种数据结构,用于表示多对多的关系。图可以分为有向图和无向图。原创 2025-03-08 22:34:04 · 748 阅读 · 0 评论 -
C++基础系列【19】运算符重载
通过运算符重载,程序员可以为用户自定义类型(如类或结构体)定义运算符,使代码的行为更容易理解。原创 2025-03-05 22:25:45 · 866 阅读 · 0 评论 -
C++基础系列【18】引用和指针的区别
首先要了解引用的本质。原创 2025-03-05 22:21:05 · 314 阅读 · 0 评论 -
C++基础系列【17】函数重载
函数重载是C++的一项重要特性,通过函数重载,可以在同一个作用域内定义多个同名函数,但这些函数的参数列表必须不同(参数类型、参数个数或参数顺序不同)。当调用一个重载函数时,编译器会根据实际传递的参数类型、个数和顺序,选择最匹配的函数版本进行调用,如果找不到最匹配的,编译器会认为有歧义,报错。运算符重载本质上也是函数重载,它允许为用户自定义类型定义运算符的行为。在C++中,参数类型是否const不会产生函数重载。这是因为const。原创 2025-02-26 16:33:26 · 910 阅读 · 0 评论 -
C++基础系列【16】动态内存管理
专为校招、社招3年工作经验的同学打造的1V1 C++训练营,量身定制学习计划、每日代码review,简历优化,面试辅导,已帮助多名学员获得offer!中的动态内存管理是指在程序运行时,根据需要从堆(heap)中分配和释放内存。与栈内存不同,堆内存的生命周期由程序员手动控制,因此需要更加谨慎地管理。是个进阶知识点了,它允许程序员在已分配的内存上构造对象,而不会分配新的内存,只是使用指定的内存地址。原创 2025-02-18 14:55:34 · 945 阅读 · 0 评论 -
C++基础系列【15】堆内存vs栈内存
堆内存是用于存储动态分配的内存的区域。在C++中,我们可以通过new和delete来操作堆内存,在C中,我们可以通过malloc和free来操作堆内存。堆内存的生命周期由开发者自己管理,如果忘记回收,可能会导致内存泄漏。我们也可以通过一些辅助工具来管理堆内存,比如智能指针,或其他RAII的封装工具。栈内存是用于存储局部变量、函数参数和返回地址等数据的区域。栈内存的分配和释放由编译器自动完成,不需要程序员手动管理。栈内存的生命周期由系统的调用和返回操作自动控制。接下来,我们来看看堆空间和栈空间的特点。原创 2025-02-17 15:57:38 · 845 阅读 · 0 评论 -
C++基础系列【14】继承与多态
本文主要介绍下的概念。原创 2025-02-16 19:21:19 · 1079 阅读 · 0 评论 -
C++基础系列【13】类的成员初始化
而最上面那个图中的括号初始化不属于以上两种中的任意一种,所以编译器就会报错。那这里有个问题,以上两种方式都能初始化,那如果。,而去使用构造函数初始化列表。原创 2025-02-15 15:33:27 · 409 阅读 · 0 评论 -
C++基础系列【12】static详细介绍
静态局部变量:在函数内部定义,生命周期贯穿整个程序运行期间,但作用域局限于函数内部。静态全局变量:在全局作用域中定义,链接性受限,只能在定义它的文件中访问。静态成员变量:属于类本身,所有类的实例共享同一个静态成员变量。静态成员函数:属于类本身,不能访问非静态成员变量和非静态成员函数。线程安全的静态局部变量初始化:在多线程环境下,静态局部变量的初始化是线程安全的。静态断言:在编译时进行断言检查,用于确保某些条件在编译时成立。修饰普通函数:可以隐藏符号,不被全局可见。码字不易,欢迎大家关注评论。原创 2025-02-14 15:50:03 · 647 阅读 · 0 评论 -
C++基础系列【11】类的详细介绍
class A {};A a;这样就定义了一个class A,同时在main函数中定义A的实例a,也可以叫做定义了A的对象a,都是一个意思。注意在定义class的大括号后面有个分号,很多新手都容易忽略这个分号,最后导致编译报错。原创 2025-02-13 17:57:06 · 1239 阅读 · 0 评论 -
C++基础系列【10】面向对象介绍
你肯定知道,C++是一门支持面向对象(Object-Oriented Programming,简称OOP)的语言,那什么是面向对象呢?可以理解为面向对象是一种编程范式,它以“对象”为核心,将数据和操作数据的方法封装在一起,通过抽象、继承、多态等机制来组织代码。面向对象的主要目标是提高代码的可复用性、可维护性和可扩展性。原创 2025-02-12 16:25:29 · 1291 阅读 · 0 评论 -
C++基础系列【9】auto & decltype
在实际编程中,我们应该根据具体情况合理地使用这两个关键字。对于简单的内置类型(如intdouble等),直接使用具体类型可能更加直观和清晰。然而,对于复杂类型(如lambda表达式、智能指针、容器迭代器等),使用auto和decltype可以极大地简化代码并提高可读性。此外,应该注意到auto和decltype的一些限制和潜在问题。例如,auto变量必须在声明时立即初始化,否则编译器无法推导出其类型。同样地,decltype在推导左值引用类型时也需要特别注意,因为它会保留表达式的左值引用属性。原创 2025-02-11 15:12:29 · 918 阅读 · 0 评论 -
C++基础系列【8】如何解决编译器报的错误
由于C++是个静态编译型语言,我们在编码时经常会遇到很多编译报错。本文主要介绍下怎么解决编译器的报错。码字不易,欢迎大家。原创 2025-02-10 16:06:38 · 1281 阅读 · 0 评论 -
C++基础系列【7】值语义和引用语义
本文主要介绍值语义和引用语义的概念。原创 2025-02-10 10:04:09 · 409 阅读 · 0 评论 -
C++基础系列【6】C++作用域介绍
程序喵大人35- 资深C/C++/Rust/Android/iOS客户端开发10年大厂工作经验嵌入式/人工智能/自动驾驶/音视频/游戏开发入门级选手《C++20高级编程》《C++23高级编程》等多本书籍著译者。原创 2025-02-08 20:17:34 · 395 阅读 · 0 评论 -
C++基础系列【5】namespace & using
namespace程序喵大人35- 资深C/C++/Rust/Android/iOS客户端开发10年大厂工作经验嵌入式/人工智能/自动驾驶/音视频/游戏开发入门级选手《C++20高级编程》《C++23高级编程》等多本书籍著译者。原创 2025-02-07 20:02:52 · 408 阅读 · 0 评论 -
C++基础系列【4】C++数据类型
程序喵大人35- 资深C/C++/Rust/Android/iOS客户端开发10年大厂工作经验嵌入式/人工智能/自动驾驶/音视频/游戏开发入门级选手《C++20高级编程》《C++23高级编程》等多本书籍著译者。原创 2025-02-06 20:25:09 · 950 阅读 · 0 评论 -
C++基础系列【3】关键字介绍
本文介绍C++的一些重要关键字。原创 2025-02-05 22:22:10 · 797 阅读 · 0 评论 -
C++基础系列【2】C++基本语法
本文作为入门文档,简要介绍C++的非常基本的语法,后面章节会详细介绍C++的各个语法。原创 2025-02-04 18:23:27 · 652 阅读 · 0 评论 -
C++基础系列【1】入坑必读
如果要入坑C++,那么你需要阅读一下这篇文章。原创 2025-02-04 18:13:37 · 687 阅读 · 0 评论