c++学习
文章平均质量分 74
躯坏神辉
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
open和fopen的区别
open()是系统调用,更底层,提供更直接的控制fopen()是标准库函数,更高级,提供缓冲和格式化I/O在C++中通常使用<fstream>,它内部可能使用这些底层函数选择取决于具体需求:控制精度 vs 开发便利性对于大多数应用层开发,fopen()和 C++ 的<fstream>更合适,因为它们更安全、更方便。只有在需要特定系统功能时才使用open()。原创 2025-09-13 00:06:40 · 300 阅读 · 0 评论 -
c++怎么读取文件里的内容和往文件里写入数据
在 C++ 中,读取和写入文件主要通过<fstream>头文件提供的类来实现。原创 2025-09-13 00:03:29 · 466 阅读 · 0 评论 -
size()和length()的区别
特性size()length()来源所有 STL 容器(如vectorlistmapstring仅存在于类目的返回容器中的元素个数(通用概念)返回字符串的长度(字符个数)(特定概念)返回值size_type(通常是无符号整型,如与size()完全一样推荐度更推荐,因为它是所有容器统一的接口也可以使用,但在非字符串上下文中不可用。原创 2025-09-11 17:47:48 · 493 阅读 · 0 评论 -
详解函数重载
函数重载(Function Overloading)是指在同一作用域内定义一组函数名相同但参数列表不同的函数。参数列表的差异可以体现在参数的类型、数量或顺序上。// 参数类型:int// 参数类型:double// 参数类型:const char*这些函数共享同一个名称compare,但根据传入的实参类型(如intdouble、字符串),编译器会自动选择匹配的重载版本。提高代码可读性:相同逻辑的函数使用统一名称,如print(int)和。静态多态:编译期确定调用版本,提升性能。原创 2025-02-27 16:21:57 · 457 阅读 · 0 评论 -
全面掌握const的用法
深入理解const的底层机制,可以帮助开发者写出更安全、高效的代码。建议通过反汇编工具观察编译器生成的实际指令,结合本文理论分析,建立完整的知识体系。记住:C++的const是编译期契约,而C的const只是语法约定,这种本质差异决定了它们的不同行为模式。原创 2025-02-27 16:46:17 · 474 阅读 · 0 评论 -
掌握const和一二级指针的结合应用
const与指针的结合规则:const在左侧:修饰指向的内容。const在右侧:修饰指针本身。类型转换需严格匹配const修饰,避免间接修改常量。二级指针的const需逐层分析,确保多级间接引用的安全性。掌握const与指针的结合应用,能显著提升代码的可靠性和可维护性。建议通过实际编码练习加深理解,并在团队协作中推广const的合理使用。希望本文能帮助你彻底理解const与指针的复杂关系。如果有疑问,欢迎在评论区讨论!原创 2025-02-28 16:36:03 · 783 阅读 · 0 评论 -
掌握c++的左值引用和初识右值引用
左值引用:简化代码,提升安全性,适用于函数参数传递和返回值优化。右值引用:优化性能,支持移动语义和完美转发,是现代C++高效编程的核心。与指针对比:引用更安全,指针更灵活,需根据场景选择。掌握左值与右值引用是深入理解C++内存管理和性能优化的关键。结合汇编底层分析,能够更好地把握其本质,写出高效、健壮的代码。延伸阅读《Effective Modern C++》:深入探讨右值引用与移动语义的最佳实践。C++标准文档:ISO/IEC 14882:2020,第9章“References”。原创 2025-03-02 10:00:26 · 652 阅读 · 0 评论 -
深入理解c++的new和delete
new/delete优势:类型安全、自动初始化和析构、异常处理机制。与malloc/free对比new更适合面向对象编程,malloc适用于底层内存操作。高级用法:定位new用于内存池,提供灵活的错误处理。最佳实践优先使用智能指针管理动态内存。严格匹配new[]与delete[]。在需要高性能的场景中,考虑定位new优化内存布局。延伸阅读《Effective C++》:条款16-17详细讨论资源管理。原创 2025-03-02 10:49:05 · 1894 阅读 · 0 评论 -
类,对象和this指针
/ 输出:Name: Bread, Price: 10.0, Amount: 200// 输出:Name: Air Conditioner, Price: 10000.0, Amount: 50类与对象:类是实体的抽象,对象是类的实例化,二者共同构成OOP的基石。封装与访问控制:通过publicprivate实现数据保护,提升代码健壮性。this指针:隐式传递对象地址,确保成员方法正确操作不同对象的数据。最佳实践优先使用类封装数据,通过公有接口操作私有成员。合理设计Get/Set。原创 2025-03-02 11:44:51 · 894 阅读 · 0 评论 -
掌握对象的浅拷贝和深拷贝
/ 开辟新内存i<=top;++i) {// 深拷贝数据。原创 2025-03-04 13:35:59 · 415 阅读 · 0 评论 -
掌握构造函数的初始化列表
初始化列表位于构造函数参数列表之后,以冒号开头,用于在对象创建时直接初始化成员变量。构造函数初始化列表是C++对象构造过程中的核心机制。保证对象构造的正确性提高程序运行效率避免初始化顺序导致的隐蔽bug实现更优雅的类设计掌握初始化列表的使用技巧,是成为合格C++开发者的重要里程碑。建议在实际编码中养成使用初始化列表的习惯,并注意类成员的声明顺序,这将显著提高代码质量和可维护性。原创 2025-03-04 14:28:45 · 593 阅读 · 0 评论 -
掌握类的各种成员方法以及区别
理解不同类型的类成员是掌握面向对象编程的关键。确保数据的封装性和安全性实现类级别的共享操作保证const对象的正确使用提升代码的可维护性和健壮性在实际开发中,建议遵循"最小权限原则":方法只应获得完成其功能所需的最低访问权限。这种设计理念将显著提高代码质量和可维护性。原创 2025-03-04 14:58:19 · 408 阅读 · 0 评论 -
指向类成员的指针
普通成员指针需指定类作用域,且访问时依赖对象。静态成员指针行为类似全局变量/函数,无需对象。注意内存管理规范,优先使用C++的new/delete。熟练使用成员指针可提升代码灵活性,尤其在模板和回调场景中。通过本文的学习,读者应能掌握指向类成员指针的核心概念,避免常见错误,并理解其在C++高级特性中的价值。原创 2025-03-04 15:28:45 · 828 阅读 · 0 评论 -
理解函数模板
函数模板通过参数化类型实现通用性。template <typename T> // 模板参数列表a : b;:声明模板参数,T为类型占位符。类型推导:调用时根据实参类型自动推导T,如max(3, 5)推导为int。原因:分离声明与定义会导致链接错误(模板无法在编译单元外实例化)。核心优势:函数模板通过类型参数化提升代码复用性,适用于容器、算法等通用场景。特例化与重载:合理使用特例化和非模板函数优化特定类型的逻辑。代码组织:始终将模板定义放在头文件中,避免链接错误。示例:通用交换函数。原创 2025-03-04 16:15:41 · 926 阅读 · 0 评论 -
实现C++STL向量容器vector代码
自定义vectorfirst:指向数组的起始位置。last:指向最后一个有效元素的后继位置。end:指向数组内存块的后继位置。构造函数private:T* first;// 指向数组首元素T* last;// 指向有效元素的后继位置T* end;// 指向内存块末尾public:public:public :free(p);p -> ~ T();} };free(p);p -> ~ T();} };(args)...);原创 2025-03-05 11:20:41 · 413 阅读 · 0 评论 -
深入理解new和delete的原理
当类有析构函数时,new[]会额外分配4字节存储元素个数,确保delete[]正确调用每个元素的析构函数。public:Test() { std::cout << "构造Test\n";~Test() { std::cout << "析构Test\n";// 分配3个Test对象// 正确释放return 0;构造Test构造Test构造Test析构Test析构Test析构Test通过重载全局std::cout << "分配 " << size << " 字节\n";原创 2025-03-11 17:09:42 · 517 阅读 · 0 评论 -
new和delete重载实现的对象池应用
优化高频内存操作:通过预分配内存池,减少mallocfree的调用次数。管理空闲对象:使用链表维护空闲对象,快速分配和回收内存。严格配对new与deletenew[]与delete[]必须配对使用。避免混用:对自定义类(含析构函数)必须使用delete[]释放数组。原创 2025-03-11 17:37:22 · 503 阅读 · 0 评论 -
实现内存拷贝函数
在 C/C++ 中,赋值表达式 a = b 返回的是赋值后的左值(即 a 的新值)。原创 2025-09-09 23:54:17 · 88 阅读 · 0 评论 -
assert的用法
/ 使用 && 连接字符串字面量// 或者使用逗号操作符(不太推荐)// 更详细的断言宏// 更详细的断言宏 # define MY_ASSERT(condition , message) \ do {\ if(!\ } \ } while(false) // 使用 MY_ASSERT(ptr!// 更详细的断言宏 # define MY_ASSERT(condition , message) \ do {\ if(!原创 2025-09-09 23:45:29 · 409 阅读 · 0 评论 -
野指针和悬浮指针的区别
特性悬浮指针野指针主要特征指向已释放的内存未初始化或指向无效地址指针值通常是有效的地址值随机垃圾值或无效地址危险性高度危险(可能暂时正常工作)极度危险(通常立即崩溃)常见场景释放后使用、返回局部变量地址未初始化指针、越界访问检测难度较难(可能隐藏很长时间)较易(通常立即暴露)原创 2025-09-09 23:06:37 · 366 阅读 · 0 评论 -
内存管理器和内存管理单元的区别
特性内存管理器MMU(内存管理单元)本质软件组件(C++运行时库的一部分)硬件组件(CPU的一部分)层级应用程序/操作系统层面处理器硬件层面主要职责分配和释放堆内存,减少碎片虚拟地址到物理地址的转换,内存保护工作内容管理内存池,处理new/delete请求地址转换,权限检查,缓存管理可见性对程序员可见,可以通过代码交互对程序员透明,由硬件自动处理内存管理器和MMU不是替代关系,而是协同工作内存管理器负责:“这块内存给你用,用完了还给我”MMU负责:“你要访问的内存在这里,而且你有权限访问”原创 2025-09-09 23:00:40 · 252 阅读 · 0 评论 -
delete释放内存
权限交还:将内存的使用权返还给内存管理器标记空闲:该内存块被标记为可重新分配数据残留:原有数据可能暂时保留,但不能依赖这一点防止泄漏:确保内存可以被重复使用避免碎片:合理的内存释放有助于减少内存碎片核心要点:释放内存不是"擦除数据",而是"放弃使用权"。一旦释放,就不应该再访问那块内存,因为它的内容可能随时被其他代码修改。原创 2025-09-09 22:59:22 · 428 阅读 · 0 评论
分享