
C++学习进展
文章平均质量分 62
报错小能手
等我读懂代码的隐喻我早就死了
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
C++笔记(面向对象)六(4+2C++11)个缺省函数详解
C++11移动语义详解:两个关键成员函数 摘要: C++11引入的移动语义通过移动构造函数和移动赋值运算符显著提升性能。移动构造函数(ClassName&&)通过"窃取"临时对象资源避免深拷贝,需标记为noexcept。移动赋值运算符实现资源的高效转移,遵循"释放-窃取-置空"模式。编译器会在满足条件时自动生成这些函数,但管理资源的类需自定义实现。关键点包括:移动后源对象应置为空状态、配合std::move使用、与现代容器协同工作。实际开发中应优先依赖原创 2025-10-03 12:14:11 · 795 阅读 · 0 评论 -
C++笔记(面向对象)运算符重载
本文介绍了C++中拷贝赋值运算符重载函数的实现和使用。该函数用于将一个已存在对象的值赋给另一个已存在对象,函数原型为类名operator=(const 类名& 源对象);。文章还对比了拷贝构造函数和赋值成员函数的区别:拷贝构造函数在对象初始化、函数参数传递和返回对象时调用,而赋值成员函数在已存在对象间赋值时调用。需要注意的是,编译器可能通过返回值优化(RVO)等技术减少不必要的拷贝操作。原创 2025-10-02 12:19:58 · 215 阅读 · 0 评论 -
C++笔记(面向对象)拷贝构造函数 深拷贝浅拷贝
文章摘要:拷贝构造函数通过常量引用传参避免递归调用。浅拷贝仅复制基本数据类型和引用地址,效率高但共享数据存在风险;深拷贝为引用类型分配新内存并复制数据,保证对象独立性但开销较大。C语言需手动实现类似拷贝功能。原创 2025-09-30 13:33:36 · 292 阅读 · 0 评论 -
C++笔记(面向对象)成员初始化列表
C++成员初始化列表是在构造函数参数列表后使用冒号语法初始化成员变量的高效方式,适用于类类型成员、const成员和引用成员。其优点包括:直接调用成员对象的合适构造函数提高效率;对于const和引用成员是唯一初始化方式;初始化顺序按成员声明顺序而非初始化列表顺序。使用时需注意避免依赖未初始化成员。普通函数无法使用初始化列表,因为这是构造函数特有的语法特性。引用返回可避免拷贝开销,但需确保对象生命周期足够长。原创 2025-09-29 12:14:21 · 270 阅读 · 0 评论 -
C++笔记(面向对象)构造函数 析构函数 及二者关系
构造函数和析构函数是C++中管理对象生命周期的特殊成员函数。构造函数用于初始化对象,与类同名、无返回类型,可重载;若未定义,编译器会生成默认构造函数。析构函数(~类名)用于释放资源,无参数和返回值,对象销毁时自动调用。二者功能互补:构造函数负责初始化,析构函数负责清理,共同完成对象从创建到销毁的全过程管理。局部对象超出作用域时析构,全局对象在程序结束时析构,动态对象通过delete释放时调用析构函数。原创 2025-09-28 14:48:17 · 564 阅读 · 0 评论 -
C++笔记(面向对象)this指针 及区分静态非静态成员
C++编译器分三个阶段处理类定义:首先识别属性名称和类型,其次记录函数原型和访问限定,最后改写非静态成员函数,隐式添加this指针参数(类型为ClassName*const),将成员访问转换为this->形式。this指针使所有对象共享同一份成员函数代码,并在调用时自动传递当前对象地址。静态成员属于类级别,存储在全局数据区,可通过类名访问且无this指针;非静态成员属于对象级别,每创建对象都会独立分配内存,必须通过对象访问。原创 2025-09-27 10:45:53 · 357 阅读 · 0 评论 -
C++笔记(面向对象)类的定义
类是一种将相关属性和方法封装为独立单元的数据类型,通过成员变量定义对象状态,成员函数定义对象行为。类支持封装(public/private/protected访问控制)、继承和多态三大特性,能提高代码安全性、可维护性和复用性。定义时使用class关键字,系统不分配存储空间,内部函数默认为内联函数。私有数据需通过公有函数访问,protected成员可在类和子类中访问。类实现了数据抽象和代码组织管理,使程序结构更清晰。原创 2025-09-27 09:52:13 · 161 阅读 · 0 评论 -
C++笔记(基础)string基础
本文介绍了C++中string类的基本用法。string是复合数据类型,支持多种初始化方式。可以通过length()/size()获取字符串长度,使用+或+=进行拼接,[]或at()访问字符(at()会检查越界)。substr()可提取子串,find()用于查找内容,compare()或关系运算符可比较字符串。注意sizeof(string)返回的是对象管理结构的大小而非字符串长度,要获取实际字符数应使用size()或length()。这些方法使string类成为处理字符串的强大工具。原创 2025-09-25 18:42:48 · 345 阅读 · 0 评论 -
C++笔记(基础)将亡值 左右值的答疑
本文将亡值(xvalue)是C++中一种特殊的右值表达式,它具有内存地址但资源即将失效,生命周期即将结束,可被移动。主要产生将亡值的两种情况:一是函数返回右值引用(T&&),此时返回对象即将销毁;二是std::move(obj)的结果,它将左值强制转换为右值引用。将亡值的核心价值在于触发高效的资源转移,优先匹配移动函数而非拷贝函数。虽然将亡值可以取地址(与纯右值不同),但它本质上仍是临时对象,资源转移后处于"移后态"不应再使用。这种机制是C++实现高效资源管理的重要手段。原创 2025-09-25 18:40:15 · 268 阅读 · 0 评论 -
C++笔记(基础)基于范围的for循环 nullptr,using关键字
基于范围的for循环通过值传递或引用传递遍历数组,值传递创建副本不影响原数组,引用传递则直接修改元素。建议对大型对象使用const引用避免拷贝开销。适用范围包括原生数组、STL容器和自定义类型,但存在不能获取索引、反向遍历等限制。nullptr比NULL更安全明确,专用于指针类型。using可替代typedef并支持模板别名,简化代码。原创 2025-09-25 18:36:14 · 517 阅读 · 0 评论 -
C++笔记(基础)动态内存管理 auto,decltype关键字
c++的动态内存管理new :作用与malloc相仿delete:作用与free相仿用法:int* ptr = new int//(分配一个int类型的内存空间)int* arr = new int[5]//分配一个包含5个int元素的数组delete ptr;auto(自动类型推导)(a自动被推导成int)decltype(间接推导)用法在模板编程中,decltype 非常有用。它可以帮助处理一些依赖于模板参数的类型。原创 2025-09-25 18:30:34 · 466 阅读 · 0 评论 -
C++笔记(基础)缺省值 函数重载(概念)名字空间域
C++函数参数缺省值的规则是:若调用时提供实参则覆盖缺省值,否则使用缺省值。函数重载要求参数类型或数量不同(返回值类型不影响)。C++通过名称修饰实现重载,而C语言不支持。函数模板使用template<typename T>定义,编译器根据实参类型实例化。命名空间通过namespace定义,可用::访问成员,using声明/指令可简化访问,支持嵌套命名空间但需完整路径引用。这些特性增强了C++的类型安全性和代码组织能力。原创 2025-09-25 18:26:56 · 446 阅读 · 0 评论 -
C++笔记(基础)引用 inline内联函数
文章摘要: 引用是变量的别名,必须初始化且不可为空,能实现多别名但不可嵌套引用。与指针相比,引用无需分配内存、不可更改绑定对象且更安全。函数传参时,引用直接操作原变量,而值传递创建副本。左值引用绑定变量,右值引用绑定临时值;const左值引用可接受右值。内联函数(inline)通过代码展开减少调用开销(寄存器保存、跳转等),但复杂函数可能不被内联。与宏相比,内联函数具备类型检查和安全特性,适用性更广。优先使用引用而非指针,但需避免返回局部变量地址。原创 2025-09-25 18:22:39 · 570 阅读 · 0 评论 -
C++笔记(基础)初始化输入输出 const
C++初始化方式多样,包括传统初始化、括号初始化(更严谨,能检查类型)。输入输出使用cin/cout,其中cin.get()可读取单个字符(包括空格),cin.getline()可读取整行。const在C++中具有常量属性,定义数组时大小必须为常量;与C不同,C++的const若用编译期常量初始化则视为编译期常量,可作为常量表达式。const指针规则在C/C++中一致,但C++通过编译器优化使直接访问const变量时仍显示初始值。const主要用于编译期检查和代码可读性,C++还支持编译期常量场景。原创 2025-09-25 18:14:35 · 297 阅读 · 0 评论