
C++
文章平均质量分 72
C++基础
胡乱儿起个名
工作记录.......
展开
-
C++中,四种类型转换运算符
转换类型 | 检查时机 | 安全性 | 主要用途 || 编译时 | 中等 | 相关类型转换 || 运行时 | 高 | 多态类型向下转换 || 无 | 极低 | 无关类型二进制重解释 |const_cast| 编译时 | 低 | 修改constvolatile。原创 2025-05-12 10:17:39 · 396 阅读 · 0 评论 -
C++ 联合体终极指南
联合体(union)是一种特殊的数据结构,所有成员共享同一块内存空间。其核心特点包括:同一时间只能使用一个成员,大小由最大成员决定,修改一个成员会影响其他成员的值。联合体的基本语法简单,适用于类型转换、协议解析和节省内存等场景。C++11后支持匿名联合体和非平凡类型成员,但需手动管理构造和析构。联合体不能继承、包含虚函数或静态成员,且C++11前不能包含带构造函数的成员。相比于结构体,联合体共享内存,同一时间只能使用一个成员,常用于底层操作。实际应用中,联合体可用于模拟CPU寄存器、处理图形颜色等。使用时需原创 2025-05-11 00:49:10 · 256 阅读 · 0 评论 -
C++ 中的 enum详细解释(从基础到高级)
用有意义的名字代替数字,让代码更易读、更安全。(枚举)是 C++ 中用来定义。原创 2025-05-11 00:26:26 · 320 阅读 · 0 评论 -
C++中的this指针
this指针是C++中一个非常重要的概念,它是一个指向当前对象的指针,在类的非静态成员函数中自动可用。下面我将详细解释this指针的用途和工作原理,并提供代码示例。原创 2025-05-08 11:23:27 · 340 阅读 · 0 评论 -
一文搞定C/C++ 技术面试基础知识总结
宏定义 #defineconst 常量宏定义,相当于字符替换常量声明预处理器处理编译器处理无类型安全检查有类型安全检查不分配内存要分配内存存储在代码段存储在数据段可通过#undef取消不可取消如何定义一个只能在堆上(栈上)生成对象的类?原创 2025-05-07 19:47:07 · 1637 阅读 · 0 评论 -
《C++ 模板:泛型编程的核心》
模板是C++中实现泛型编程的重要特性,它允许你编写与数据类型无关的代码。模板可以分为函数模板和类模板两种。原创 2025-04-22 19:43:47 · 305 阅读 · 0 评论 -
《C/C++预定义宏深度剖析:编译上下文获取指南》
这些预定义宏是C/C++生态系统的重要组成部分,合理使用可以显著提升代码的可调试性和可维护性。:展开为当前函数的未限定名称(unqualified name):展开为当前源文件的绝对路径或相对路径字符串。:展开为当前代码行的十进制整数。:展开为编译开始的日期字符串。:展开为编译开始的时间字符串。:C99/C++11引入。:版本信息、构建时间戳。:错误报告、调试日志。配合记录完整构建时间。:调试日志、异常处理。原创 2025-04-21 20:36:26 · 579 阅读 · 0 评论 -
《理解C++宏:从#define到条件编译》
1024优点在预处理阶段替换,不占用存储空间可用于数组大小等需要编译时常量的场合缺点现代C++推荐使用const或constexpr替代constexpr int buffer_size = 1024;原创 2025-04-21 20:29:38 · 990 阅读 · 0 评论 -
《深入解析C++中的explicit关键字:防止隐式转换的利器》
显式构造函数是C++中一种防止隐式类型转换的构造函数声明方式,使用explicit关键字标记。原创 2025-04-21 20:11:44 · 193 阅读 · 0 评论 -
《运算符重载:让对象学会加减乘除》
运算符重载是指为自定义类型(类或结构体)重新定义或重载已有的运算符,使其能够操作该类型的对象。运算符重载是C++中实现自定义类型行为一致性的重要手段。合理使用运算符重载可以使代码更直观、更易读。但同时也要注意不要滥用,确保重载的运算符行为符合直觉,并遵循语言惯例。原创 2025-04-14 21:00:24 · 1228 阅读 · 0 评论 -
C++ 标准库中的 <algorithm> 头文件算法总结
这些算法可以大大提高C++编程效率,避免了手动编写循环的繁琐工作,同时通常比手写循环更高效。头文件提供了大量有用的算法,主要用于操作容器(如。这些算法通常通过迭代器来操作容器元素。原创 2025-04-14 20:52:27 · 540 阅读 · 0 评论 -
《高阶函数:把函数当玩具传来传去》
高阶函数是指可以接受其他函数作为参数或返回函数作为结果的函数。原创 2025-04-14 20:50:15 · 194 阅读 · 0 评论 -
《extern:如何在编译时“暗通款曲“》
extern是C++中管理链接性(linkage)的重要关键字,主要用于声明外部定义的变量或函数。原创 2025-04-14 20:39:49 · 439 阅读 · 0 评论 -
《匿名函数:临时函数的快餐文化》
匿名函数(也称为 lambda 表达式)是 C++11 引入的一项重要特性,它允许你在需要函数的地方内联定义函数,而无需单独声明和定义命名函数。原创 2025-04-14 11:19:37 · 387 阅读 · 0 评论 -
内联函数通常定义在头文件中的原因详解
内联函数(inline function)是C++中的一种函数优化机制,通过在函数声明前加上inline关键字,建议编译器将函数调用替换为函数体本身的代码,从而减少函数调用的开销。编译器需要在每个使用内联函数的源文件中看到其完整定义,这样才能在调用点进行内联展开。// 编译器可以看到定义,可以内联// 编译器可以看到定义,可以内联// 只有声明// 错误!编译器看不到定义,无法内联。原创 2025-04-11 18:00:11 · 384 阅读 · 0 评论 -
《inline:编译器最爱的“作弊指令“》
inline是对编译器的优化建议,不是强制命令适合小型、频繁调用的函数内联函数通常定义在头文件中类内定义的成员函数默认是内联的过度使用内联可能导致代码膨胀现代C++中inline也用于变量定义合理使用inline可以提高程序性能,但需要根据实际情况权衡利弊。原创 2025-04-11 17:47:01 · 468 阅读 · 0 评论 -
《final:C++的“断子绝孙“咒语》
final是 C++11 引入的关键字,用于限制类或虚函数的进一步继承或重写。下面是对final关键字的详细总结和示例。原创 2025-04-08 14:56:56 · 549 阅读 · 0 评论 -
C++虚函数
虚函数是C++实现运行时多态(动态绑定)的核心机制。通过在基类中使用virtual关键字声明函数,派生类可以重写这些函数,实现多态行为。原创 2025-04-08 14:54:52 · 363 阅读 · 0 评论 -
C++的数据类型与内存占用
而内存大小又由比特(bit)组成。的大小可能因编译器不同而变化(如32位系统中。直接决定了变量占用的。原创 2025-04-02 10:48:19 · 283 阅读 · 0 评论 -
C++ 结构体、结构体指针与结构体指针数组详解
结构体:将不同类型的数据组合成一个新的数据类型结构体指针:指向结构体的指针,使用->操作符访问成员结构体指针数组:存储多个结构体指针的数组,适合管理大量结构体对象结构体指针和指针数组在管理大量数据时非常有用,可以减少数据复制的开销,提高程序效率。原创 2025-03-31 20:33:50 · 370 阅读 · 0 评论 -
C++的指针数组、数组指针和指针数组指针
类型例子本质常见用途指针数组数组(元素是指针)存多个字符串数组指针指针(指向数组)处理二维数组指针数组指针指针(指向指针数组)动态修改指针数组。原创 2025-03-31 20:25:04 · 417 阅读 · 0 评论 -
指针函数、函数指针
内存管理优先使用unique_ptrshared_ptr避免裸指针所有权传递回调机制// 传统(不推荐)// 现代(推荐)类型简化技巧// 复杂指针类型使用别名// C++11后更推荐成员函数处理// 传统成员函数指针// 现代替代方案维度传统形式现代C++替代方案优势比较返回值裸指针智能指针自动内存管理,异常安全回调函数指针更灵活,支持状态捕获可读性复杂声明类型别名+auto代码更清晰类型安全弱类型强类型系统编译期检查更严格扩展性仅支持普通函数。原创 2025-03-31 20:11:59 · 808 阅读 · 0 评论 -
C++的位与、位或、左移、右移、异或、位取反
C++ 提供了多种位运算符,用于直接操作整数的二进制位。原创 2025-03-31 19:45:16 · 621 阅读 · 0 评论 -
C++的深拷贝和浅拷贝
拷贝构造函数是C++中的一种特殊构造函数,用于创建一个新对象,并用另一个同类型对象的值来初始化它。它的主要作用是 复制对象。ClassName 是类的名称。other 是要被复制的对象,通常以 const 引用传递。为了避免浅拷贝的问题,可以为类定义自定义的拷贝构造函数,实现 深拷贝。int* ptr;// 普通构造函数// 自定义拷贝构造函数(深拷贝)// 析构函数// 调用自定义拷贝构造函数(深拷贝)// 输出20,obj1的ptr未被修改。原创 2025-03-21 10:00:00 · 666 阅读 · 0 评论 -
《deque:双端进出的艺术》
//如果容器变短,则末尾超出容器长度的元素被删除。//重新指定容器的长度为num,若容器变长,则以默认值填充新位置。//删除pos位置的数据,返回下一个数据的位置。//删除[beg,end)区间的数据,返回下一个数据的位置。//重新指定容器的长度为num,若容器变长,则以elem值填充新位置。//在pos位置插入一个elem元素的拷贝,返回新数据的位置。//清空容器的所有数据。//在pos位置插入[beg,end)区间的数据,无返回值。原创 2025-03-17 18:04:18 · 643 阅读 · 0 评论 -
智能指针是管家,原始指针是野马
std::unique_ptr 是 C++11 引入的一个智能指针类,它是一个 独占性所有权 的智能指针,意味着它总是唯一拥有指针所指向的对象。C++11引入了三种智能指针:std::unique_ptr、std::shared_ptr和std::weak_ptr。在 C++14 中,std::make_unique 被引入,它是创建 unique_ptr 的推荐方法。std::weak_ptr不拥有它所指向的对象,主要用于解决shared_ptr之间的循环引用问题。它通常与shared_ptr一起使用。原创 2025-03-17 17:09:47 · 830 阅读 · 0 评论 -
C++的for循环总结
标准 for 循环:最常见的迭代方式,适用于已知迭代次数的场景。基于范围的 for 循环:用于简化容器的遍历,避免手动管理索引。嵌套for 循环:用于处理多维数据,如二维数组。continue 和 break:控制循环流,跳过某次迭代或退出循环。原创 2025-03-11 15:23:36 · 687 阅读 · 0 评论 -
力扣题目总结——链表篇
给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点。给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。给你一个单链表的头节点 head ,请你判断该链表是否为。新链表是通过拼接给定的两个链表的所有节点组成的。给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照。给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。原创 2025-03-04 10:55:12 · 1004 阅读 · 0 评论 -
算法复杂度
算法复杂度旨在计算在输入数据量N的情况下,算法的「时间使用」和「空间使用」情况;体现算法运行使用的时间和空间随「数据大小 N」而增大的速度。时间: 假设各操作的运行时间为固定常数,统计算法运行的「计算操作的数量」 ,以代表算法运行所需时间;根据输入数据的特点,时间复杂度具有「最差」、「平均」、「最佳」三种情况,分别使用。「输入数据大小 N 」指算法处理的输入数据量;时,算法运行所使用的「暂存空间」+「输出空间」的总体大小。空间: 统计在最差情况下,算法运行所需使用的「最大空间」;,判断此数组中是否有数字。原创 2025-01-08 20:18:16 · 979 阅读 · 0 评论 -
链表、栈、队列、树
树是一种非线性数据结构,根据子节点数量可分为 「二叉树」 和 「多叉树」,最顶层的节点称为「根节点 root」。以二叉树为例,每个节点包含三个成员变量:「值 val」、「左子节点 left」、「右子节点 right」。链表以节点为单位,每个元素都是一个独立对象,在内存空间的存储是非连续的。链表的节点对象具有两个成员变量:「值 val」,「后继节点引用 next」。栈是一种具有 「先入后出」 特点的抽象数据结构,可使用数组或链表实现。队列是一种具有 「先入先出」 特点的抽象数据结构,可使用链表实现。原创 2025-01-08 19:58:26 · 547 阅读 · 0 评论 -
C++系列之继承和多态
继承的语法:继承方式一共有三种:总结:继承的好处:可以减少重复的代码class A : public B;A 类称为子类 或 派生类B 类称为父类 或 基类派生类中的成员,包含两大部分:一类是从基类继承过来的,一类是自己增加的成员。从基类继承过过来的表现其共性,而新增的成员体现了其个性。多态分为两类静态多态和动态多态区别:下面通过案例进行讲解多态总结:多态满足条件多态使用条件重写:函数返回值类型 函数名 参数列表 完全一致称为重写虚函数和抽象类在多态中,通常父类中虚函数的实现是毫无意义的,主要都是调用子原创 2025-01-01 10:15:00 · 318 阅读 · 0 评论 -
const 的温柔陷阱:你以为的不变,其实可以变?
【代码】const修饰成员函数。原创 2024-12-31 10:00:00 · 304 阅读 · 0 评论 -
《static全面总结:变量永生与作用域封印》
作用域被限制在定义它们的程序文件中(即别的程序文件不能用这个变量),初始值为0。在多人开发项目时,为了防止与他人命令变量重名,可以将变量定位为static。在C++的,静态变量是一个非常有用的特性,它在程序执行期间只初始化一次,并在程序的整个执行期间都保持其值。定义在函数中,只初始化一次,不像普通的局部变量,会随着某次函数调用的结束而消失。静态成员就是在成员变量和成员函数前加上关键字static,称为静态成员。原创 2024-12-31 09:30:00 · 372 阅读 · 0 评论 -
C++系列之构造函数和析构函数
总结:如果属性有在堆区开辟的,一定要自己提供拷贝构造函数,防止浅拷贝带来的问题。如果用户定义有参构造函数,c++不在提供默认无参构造,但是会提供默认拷贝构造。解决上述问题,这两个函数将会被编译器自动调用,完成对象初始化和清理工作。对象的初始化和清理工作是编译器强制要我们做的事情,因此如果。如果用户定义拷贝构造函数,c++不会再提供其他构造函数。C++提供了初始化列表语法,用来初始化属性。3.默认拷贝构造函数,对属性进行值拷贝。1.默认构造函数(无参,函数体为空)2.默认析构函数(无参,函数体为空)原创 2024-12-30 17:45:02 · 990 阅读 · 0 评论 -
引用 vs 指针:谁才是你的“真爱”?
结论:C++推荐用引用技术,因为语法方便,引用本质是指针常量,但是所有的指针操作编译器都帮我们做了。总结:通过引用参数产生的效果同按地址传递是一样的。引用的语法更清楚简单。:函数传参时,可以利用引用的技术让形参修饰实参。作用:引用是可以作为函数的返回值存在的。:常量引用主要用来修饰形参,防止误操作。在函数形参列表中,可以加。:可以简化指针修改实参。用法:函数调用作为左值。原创 2024-12-30 16:38:08 · 425 阅读 · 0 评论 -
C++系列之数组
数据类型 数组名[ 数组长度 ];数据类型 数组名[ 数组长度 ] = { 值1,值2 ...};数据类型 数组名[ ] = { 值1,值2 ...};//定义方式1//数据类型 数组名[元素个数];//利用下标赋值//利用下标输出//第二种定义方式//数据类型 数组名[元素个数] = {值1,值2 ,值3 ...};//如果{}内不足10个数据,剩余数据用0补全//逐个输出//一个一个输出太麻烦,因此可以利用循环进行输出i < 10;i++)原创 2024-12-28 09:30:00 · 388 阅读 · 0 评论 -
C++系列之函数
作用:将一段经常使用的代码封装起来,减少重复代码,一个较大的程序,一般分为若干个程序块,每个模块实现特定的功能。函数的定义一般主要有5个步骤:1、返回值类型2、函数名3、参数表列4、函数体语句5、return 表达式返回值类型 函数名 (参数列表) {函数体语句 return 表达式 }返回值类型 :一个函数可以返回一个值。在函数定义中函数名:给函数起个名称参数列表:使用该函数时,传入的数据函数体语句:花括号内的代码,函数内需要执行的语句。原创 2024-12-28 10:15:00 · 254 阅读 · 0 评论 -
C++系列之结构体
struct 结构体名 { 结构体成员列表 };struct 结构体名 变量名struct 结构体名 变量名 = { 成员1值 , 成员2值…}定义结构体时顺便创建变量//结构体定义//成员列表//姓名int age;//年龄int score;//分数}stu3;//结构体变量创建方式3//结构体变量创建方式1//struct 关键字可以省略stu1.name = "张三";原创 2024-12-27 09:45:00 · 324 阅读 · 0 评论 -
C++数据类型、运算符、循环语句、跳转语句
作用:在代码中加一些说明和解释,方便自己或其他程序员程序员阅读代码两种格式作用:给一段指定的内存空间起名,方便操作这段内存语法:示例:1.3 常量作用:用于记录程序中不可更改的数据C++定义常量两种方式#define 宏常量: const修饰的变量 1.4 关键字**作用:**关键字是C++中预先保留的单词(标识符)C++关键字如下:作用:C++规定给标识符(变量、常量)命名时,有一套自己的规则作用:整型变量表示的是整数类型的数据C++中能够表示整型的类型有以下几种方式,区别在于所占内存空间不同:原创 2024-12-27 10:00:00 · 2147 阅读 · 0 评论 -
C++的内存四区
在程序编译后,生成了exe可执行程序,原创 2024-12-26 16:35:53 · 433 阅读 · 0 评论