C++
文章平均质量分 92
Vect__
我不爱学习
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
g++演示如何从C++代码到可执行程序
本文介绍了C++代码从编写到生成可执行文件的完整编译过程。文章通过示例代码演示了预处理、编译、汇编和链接四个关键阶段:预处理阶段处理宏替换和头文件展开;编译阶段进行语法分析、语义检查和模板实例化;汇编阶段生成机器码目标文件;最后链接阶段合并目标文件并解析符号依赖。文中特别强调了模板实例化的时机、符号表的作用以及重定位信息的重要性,并通过实际命令操作展示了每个阶段的输出结果,帮助读者直观理解C++程序的编译流程。原创 2025-12-14 18:52:24 · 1007 阅读 · 0 评论 -
C++ 内存安全双保险:异常处理 + 智能指针,彻底跟内存泄漏说 “再见”
本文介绍了C++异常处理机制,主要包括以下内容: C传统错误处理方式的局限性:终止程序或返回错误码存在用户体验差和繁琐的问题。 C++异常概念:通过throw抛出异常,catch捕获异常,try包裹可能出错的代码。 异常匹配原则: 抛出对象类型决定匹配的catch块 异常沿调用链向上传播,由最近的匹配catch处理 异常对象会被拷贝到catch块中 catch(...)可捕获所有类型异常 异常栈展开过程:从抛出位置开始,沿调用栈向上查找匹配catch块,直到main函数仍未匹配则程序终止。 异常重新抛出机制原创 2025-11-28 16:22:46 · 713 阅读 · 0 评论 -
别再只懂 C++98!C++11 这7个核心特性,直接拉开你与普通开发者的差距
本文介绍了C++11中的初始化方式、声明方式和右值引用相关内容。主要内容包括: 初始化方式: 扩展了{}初始化范围,可用于所有内置和自定义类型 介绍了std::initializer_list的实现原理和使用方法 声明方式: auto关键字实现类型自动推断 decltype获取表达式类型 右值引用: 区分左值和右值 左值引用和右值引用的区别 右值引用的应用场景,通过move语义减少拷贝开销 文章通过代码示例展示了这些新特性的具体用法,帮助理解C++11在语言层面所做的改进。原创 2025-11-28 16:16:32 · 1364 阅读 · 1 评论 -
踩爆 8 个坑后,我悟了!unordered_map 底层封装的正确姿势(代码可直接抄)
本文介绍了如何从基础的KV模型哈希表逐步改造为支持泛型T的哈希桶,最终封装成unordered_map和unordered_set。主要步骤包括:1) 将节点从pair<K,V>抽象为泛型T;2) 引入KeyOfT策略类从T中提取key;3) 实现通用哈希桶HashTable<K,T,KeyOfT,Hash>;4) 添加迭代器支持;5) 封装具体容器类。文章特别指出了实现过程中的常见错误,如节点类型使用不当等。通过这种分层设计,可以复用同一套哈希桶实现来支持不同的关联容器需求。原创 2025-11-15 22:40:41 · 1160 阅读 · 2 评论 -
“码”上认亲!面向对象之多态:一脉相承的「同名不同用」
文章摘要:本文介绍了C++多态的概念及实现方式。通过虚函数机制,可以让不同类型的对象执行相同行为时产生不同结果。重点讲解了基类析构函数声明为虚函数的重要性,以避免内存泄漏问题。同时介绍了C++11引入的override和final关键字,用于确保正确重写虚函数或禁止重写。文章还分析了多态的实现条件,包括基类虚函数重写、基类指针或引用调用虚函数等关键点。原创 2025-10-23 16:01:19 · 734 阅读 · 14 评论 -
别再被模板折磨了:非类型参数 + 特化 + 分离编译一网打尽
本文介绍了C++模板中的非类型模板参数和模板特化两大特性。非类型模板参数允许将编译期确定的值作为模板参数,常用于静态数组大小配置,如std::array<T,N>的实现。模板特化则针对特定类型提供定制化实现,包括函数模板特化(需保持参数类型一致)和类模板特化(分全特化和偏特化)。全特化完全指定所有模板参数,偏特化可针对参数组合(如指针类型或固定部分参数)进行特化处理。通过特化能解决特殊类型场景下的问题,如指针比较的误判情况。文中通过日期类比较、类模板特化等示例代码,直观展示了这些特性的应用场景和原创 2025-10-14 12:46:35 · 986 阅读 · 19 评论 -
list 迭代器:C++ 容器封装的 “行为统一” 艺术
在C++标准库中,std::list是双向链表的容器,我们日常用就能方便地插入删除,但它的底层实现究竟是什么样的?尤其是迭代器(iterator),为什么it!=lst.end();++it)可以统一操作链表?今天,我基于一个精简版mini_list的实现,重点解析迭代器封装的底层思想,带大家从零实现并理解list容器。在mini_list中,通过实例化public:// 可写迭代器:ref=T&,ptr=T*// 只读迭代器:ref=const T&,ptr=const T*// ...原创 2025-09-25 11:50:26 · 2194 阅读 · 40 评论 -
深度剖析 vector 底层原理:从手写实现到核心技术点全解析
在C++标准模板库(STL)中,vector是最常用的容器之一,它以动态数组的形式存在,兼顾了数组的随机访问效率和动态扩容的灵活性。很多开发者日常使用vector时,往往只关注其表层接口,却对其底层实现原理一知半解。本文将通过手写一个简化版vectormy_vector),深入剖析vector的底层机制,重点讲解内存管理、深浅拷贝、迭代器失效、构造函数设计、交换机制等核心技术点,和大家交流我的一些理解。核心结构:以_start(内存起始)、_finish(元素末尾)、(容量末尾)三个指针为基础,原创 2025-09-21 14:43:29 · 1205 阅读 · 31 评论 -
从零实现一个简化版string 类 —— 深入理解std::string的底层设计
说明:本文聚焦 的实现细节与设计理由,代码使用一个教学用的 ,并配有完整实现与测试用例。不讲 API 用法,而是解释“为什么要这么实现”。在 C++ 开发中, 就像“空气”一样无处不在:拼接日志、处理配置、解析数据…… 我们随手就能写 、,却很少追问为什么这些操作有特定的性能特征。本文不讲“如何用 string”,而讲为什么要这样设计 string。我们用教学版 来逐步展示 的核心实现思想:内存布局、扩容策略、拷贝/移动语义、迭代器规则等。读完你应当能回答:为什么 在大多数情况下是 O(1)?为什么原创 2025-09-10 22:48:46 · 1181 阅读 · 21 评论 -
初识C++模板
函数模板代表了一个函数家族,函数模板和类型无关,在使用时被参数化,根据实参类型产生特定类型的函数template<typename T1, typename T2,...> 返回值类型 函数名(参数列表){}typename是定义模板参数的关键字// 函数模板template<class T1, class T2,...> class 类模板名{};// 动态顺序表// 注意:Vector不是具体的类,是编译器根据被实例化的类型生成具体类的模具public:, _size(0)原创 2025-08-17 11:57:26 · 462 阅读 · 9 评论 -
C++内存管理
int _a2;int main()// 与C的malloc、realloc、calloc、free不同 new和delete对于自定义类型除了开辟空间还会调用构造和析构free(ptr1);// 内置类型几乎一样free(ptr3);free(ptr5);在申请动态内存空间时,new会调用构造,delete会调用析构new:调用。原创 2025-08-16 22:45:12 · 780 阅读 · 6 评论 -
类和对象收尾
一个类定义在另一个类的内部,这个在类内部的类就称为内部类,内部类是独立的类,仅受类域限制,所以外部类定义的对象中不包含内部类。成员变量和引用成员变量只有一次初始化的机会就是在定义的时候,在初始化列表中,自定义类型成员会调用它的默认构造,而上述演示。,并传参1给构造函数,按照成员变量声明顺序,先初始化。加一,数组在完成n个元素初始化的过程中就完成了计算。实现一个类,计算程序出现多少个类对象。类的边长数组,在类中定义两个静态变量。的构造改成非默认构造就会报错。内部类默认是外部类的友元。,为随机值,后初始化。原创 2025-08-14 20:49:37 · 773 阅读 · 8 评论 -
C语言向C++的过渡
一篇由C语言向C++过渡的知识讲解文章原创 2025-07-11 20:38:15 · 1027 阅读 · 18 评论 -
面试高频考点:传值返回和传引用返回的区别
【核心原则】原创 2025-07-20 17:33:27 · 966 阅读 · 6 评论 -
C++六大默认成员函数
值得一提的是,是我们显⽰写析构函数,对于⾃定义类型成员也会调⽤他的析构,也就是说。原创 2025-07-17 17:38:46 · 955 阅读 · 7 评论 -
初识类和对象
这是类的基本定义,和C语言结构体定义类似,C++中struct也可以定义类,C++兼容C中struct的⽤法,同时struct升级成了类,明显的变化是struct中可以定义函数,⼀般情况下我们还是推荐⽤class定义类再比如:实现一个简单的栈。原创 2025-07-15 15:28:27 · 882 阅读 · 3 评论
分享