自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C++ 中的 delete 与 default 关键字详解

特性deletedefault目的禁止函数使用显式生成默认实现适用函数任何函数特殊成员函数主要用途1. 禁止拷贝/移动2. 禁止特定重载3. 禁止隐式转换1. 恢复默认构造函数2. 显式声明特殊成员3. 保持平凡类型特性编译检查编译时报错编译时生成代码对类的影响使类不可拷贝/不可调用保持类的平凡性(trivial)C++版本C++11 引入C++11 引入// 未来可能支持delete和defaultdelete提供更强的接口约束能力default提供更清晰的默认行为控制。

2025-08-18 20:04:30 640

原创 C++ 指针赋值深度解析:p = q vs *p = *q

特性p = q(指针赋值)*p = *q(解引用赋值)操作对象指针变量本身指针指向的内存内容内存变化改变指针存储的地址改变指针指向地址的内容别名效应创建新别名不创建别名数据复制仅复制地址复制实际值指针关系指向相同地址指向不同地址内存风险内存泄漏、悬空指针空指针解引用、浅拷贝问题适用场景共享访问、数据结构数据复制、值修改智能指针shared_ptr增加计数unique_ptr需要移动行为与原始指针相同核心区别p = q*p = *q操作本质改变指针变量存储的地址改变指针指向内存的内容。

2025-08-18 18:56:58 792

原创 C++ 指针与 C 语言指针的深度比较

特性C 指针C++ 指针内存管理手动 (手动或智能指针 (new/delete, RAII)类型安全弱类型安全强类型系统,类型转换操作符空指针NULL(通常为 0)nullptr(类型安全的空指针)面向对象支持无直接支持支持多态、虚函数、成员指针引用类型无有引用类型 (),作为指针替代函数指针支持简单函数指针支持成员函数指针和函数对象模板支持无支持模板和泛型指针使用 C 风格指针的情况与 C 库交互的兼容层嵌入式系统等受限环境需要极致性能的底层操作使用 C++ 现代指针的情况。

2025-08-18 18:41:26 1120

原创 深入详解 C++ forward

只与通用引用结合使用仅在模板函数中使用T&&参数时才有意义显式指定模板参数:必须使用形式,让编译器知道原始类型保持转发路径简短:避免在多个函数间多次转发同一参数注意对象生命周期:转发右值后,原始对象可能不再有效处理特殊类型对于初始化列表,使用显式类型创建对于位域,创建临时副本对于重载函数,使用函数指针或 lambda 包装结合现代 C++ 特性正确使用可以:避免不必要的对象拷贝保持移动语义优化编写更通用的库代码提升程序性能。

2025-08-18 18:24:53 405

原创 C++ move

概念作用std::move将左值转为右值引用,标记对象可被移动(不实际移动资源)移动构造函数:接管other的资源,置空other的状态移动赋值运算符:释放当前资源,接管other的资源右值引用 (T&&绑定到临时对象或的结果,支持移动语义。

2025-08-18 17:59:09 339

原创 C++ const

const的核心作用是保护数据不被意外修改避免程序中的逻辑错误(如误修改常量)。让编译器进行更严格的检查,提高代码安全性。帮助编译器进行优化,提升程序性能。理解const的各种用法是掌握 C++ 的重要基础,尤其在指针和类的场景中需要特别注意其位置和含义。

2025-08-18 17:45:31 343

原创 C++ 中,花括号 {} 和圆括号 () 用于对象初始化时存在重要区别

特性花括号A a{...};圆括号A a(...);构造函数优先级优先精确匹配普通构造函数窄化转换❌ 禁止✅ 允许解析歧义❌ 无歧义✅ 可能有函数声明歧义聚合初始化✅ 支持❌ C++20 前不支持空初始化✅ 值初始化❌ 函数声明陷阱explicit构造函数✅ 支持✅ 支持防止意外类型转换✅ 更安全⚠️ 较弱。

2025-08-16 16:53:28 262

原创 C++中的引示调用和显示调用

特性隐式调用显式调用触发方式编译器自动插入程序员手动编写代码代码可见性无直接调用代码有明确的调用语句(如func()典型场景构造/析构、类型转换、运算符重载普通函数调用、手动资源管理控制权由编译器控制由程序员控制explicit关键字用于禁止隐式转换(如不适用。

2025-08-16 16:30:19 311

原创 函数指针和指针函数

特性指针函数函数指针本质函数(返回指针)指针(指向函数)声明格式操作符函数调用运算符()指针解引用(可选)内存占用函数代码段指针大小(通常4/8字节)典型用途返回动态分配的内存回调函数、策略模式赋值操作定义函数实现指向已有函数高级用法:函数指针数组// 函数指针数组示例(计算器核心)add, // 索引0:加法sub, // 索引1:减法[3] = NULL // 索引3:空指针// 加法// 输出:11。

2025-08-04 10:40:12 241

原创 C和C++字符串比较规则

从两个字符串的第一个字符开始,比较它们的ASCII值。若所有相同位置的字符均相等,但一个字符串更短(如。

2025-08-03 16:08:48 181

原创 int add(int* a, int* b) 和 int *add(int a, int b)

需要返回新数据 → 使用 int *add(int a, int b),但注意内存管理。需要操作或修改外部数据 → 使用 int add(int* a, int* b)。简单计算并返回值 → 直接使用值传递:int add(int a, int b)。返回静态变量或全局变量的地址(可能引发线程安全问题)。动态内存分配后返回指针(需手动释放)。返回值:返回一个 int*(整型指针)。参数:接受两个 int*(整型指针)。参数:接受两个 int 类型的值。返回值:返回一个 int 类型值。

2025-04-10 16:47:42 231

原创 C语言 内存管理方法

动态内存空间在操作系统的堆区中,我们平常在定义变量或数组的时候都属于局部变量和局部数组,这些局部变量和局部数组都存储在操作系统的栈区里面,想要了解栈区,我们就要知道线程和进程操作系统分配资源的最基本单位是进程,当我们运行自己程序的时候对于操作系统来说就是开启了一个进程,然后我们所有申请的空间(函数里面开辟的局部变量,动态申请内存)都会分配到当前的这个进程CPU计算的最基本单位是线程多线程程序。

2024-12-10 15:18:45 2103

原创 C语言之sizeof

在 C 语言中,sizeof是一个(而不是函数),用于获取一个变量或数据类型所占用的内存字节数。它在编译时就会被计算,因此是一个,不会在程序运行时产生开销。

2024-12-10 11:33:18 1269

原创 指针之等价交换

在 C 语言中,指针与数组有着紧密的关系。

2024-12-09 22:13:46 442

原创 指针 p1 与 *p1

p1:指针变量,表示存储的地址。*p1:通过指针访问的值,即p1所指向地址存储的值(这里是n的值)。程序中部分输出类型可能需要修正,比如地址打印用%p,整数打印用%d,否则会有不匹配的警告或错误。

2024-12-09 21:25:07 333

原创 Int (*p)[10] 与 Int *p[10]

这两种声明方式虽然看起来相似,但它们有很大的区别。

2024-12-09 21:12:35 842

原创 字节 和 位

计算机的核心处理单位依赖于具体场景:低层次是按位,存储和传输是按字节,而高层次计算则与字长密切相关。

2024-12-09 15:48:24 469

原创 64位和32位

32位计算机和64位计算机的主要区别在于它们处理数据和内存的能力。

2024-12-09 15:44:48 2331

原创 字符数组和字符串数组的区别

是一个存储单个字符的数组。本质:一个包含char类型的多个元素的数组,可以用来存储字符数据,也可以用来存储字符串(如果包含字符串结束符'\0'是一个存储多个字符串的数组。本质:一个二维数组,每行存储一个字符串,或者一个指针数组,每个指针指向一个字符串的首地址。字符数组:用来存储单个字符串。字符串数组:用来存储多个字符串,可以用二维字符数组或字符指针数组实现。

2024-11-28 20:37:39 669 1

原创 字符串与数组的运用和存储(简单&易懂版)

arr是数组的名称,传递给scanf时被视为指向数组首元素的指针。的作用是从标准输入中读取一个字符串,并存储到arr中。不用arr[]是因为在调用时,数组已经自动退化为指针,只需传递数组的名称即可。

2024-11-28 20:34:06 294

原创 Visual Studio 2022 编译错误 C4996(改进版)

【代码】Visual Studio 2022 编译错误 C4996(改进版)

2024-09-18 16:36:51 928

原创 针对Visual Studio 2022 找不到指定文件 C4996的解决方法

可能是你的代码使用标记为“已弃用”的函数、类成员、变量或 typedef。符号是使用修饰符或 C++14属性弃用的。实际的 C4996 警告消息由声明的deprecated修饰符或属性指定。

2023-10-23 08:55:08 380

空空如也

空空如也

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

TA关注的人

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