- 博客(100)
- 资源 (1)
- 收藏
- 关注
原创 【C++】std::array数组和vector数组的区别
std::array 和 std::vector 都是 C++ 中常用的容器,但它们在内存管理、大小、灵活性、性能以及用法上有明显的区别。下面详细说明两者的主要差异:
2025-03-11 16:45:52
261
原创 【C++】std::array数组的使用
std::array 是 C++11 引入的一个固定大小容器,它对 C-style 数组进行了封装,使其更安全、更易于使用,并提供了标准容器的接口。下面详细介绍如何使用 std::array 以及它的底层实现。
2025-03-11 16:44:23
334
原创 【C++】sizeof和strlen的区别
sizeof和 strlen都是 C++ 中用于获取数据大小的工具,但它们有非常不同的工作原理和使用场景。它们并不都是库函数,而是属于不同的范畴。以下是它们的主要区别:
2025-03-07 13:34:02
427
原创 【C++】函数指针和指针函数
在 C++ 中,经常会遇到函数指针和指针函数这两个概念,虽然名字相似,但它们指的是完全不同的内容。下面详细介绍一下它们的区别和用法:
2025-03-05 17:54:03
160
原创 【C++】volatile关键字
在 C++ 中,`volatile` 是一个类型修饰符,用于告诉编译器该变量可能会在程序的控制之外发生改变,因此在访问它时不能进行某些优化。下面将从多个角度详细介绍 `volatile` 的概念、用途以及注意事项:
2025-03-05 15:34:46
865
原创 【C++】std::weak_ptr 如何解决 std::shared_ptr 的循环引用问题?
本身无法直接访问对象内容,可以使用。,并安全地检查对象是否仍然存在。,使引用计数无法归零,造成。,可以打破循环引用的问题。
2025-03-05 14:48:50
395
原创 【C++】RAII机制
RAII(资源获取即初始化)是一种 C++ 编程范式,其核心思想是将资源的管理(例如内存、文件句柄、网络连接等)绑定到对象的生命周期上,即在对象构造时获取资源,在对象析构时释放资源。这样无论程序是否正常执行或者发生异常,资源都能得到及时而正确的释放,从而避免资源泄漏和其他资源管理问题。
2025-03-05 09:39:16
549
原创 【C++】内存常见问题
C++中的内存问题包括内存泄漏、悬空指针、重复释放、未初始化内存、缓冲区溢出、内存碎片、内存对齐问题及内存不足,每种问题都可能导致性能下降或安全风险,但均可通过RAII、智能指针及各类检测工具进行有效预防。
2025-03-05 09:31:06
395
原创 【C++】内存泄漏
内存泄漏指的是程序在动态分配内存后,由于没有及时释放这些内存,导致这部分内存一直处于占用状态,无法被系统或程序再次利用。下面详细介绍一下在 C++ 中内存泄漏的各个方面:
2025-03-05 09:25:49
426
原创 【Qt】Qt Widgets和QML(Qt Quick)开发界面的区别
Qt 提供了两种主要的 UI 技术:Qt Widgets和 QML(Qt Quick)。它们的核心区别主要体现在使用方式、架构、性能、开发难度和适用场景等方面。
2025-03-05 09:13:01
812
原创 【C++】为什么C++的构造函数不能为虚函数,折钩函数可以为虚函数
在C++中,构造函数不能是虚函数,而析构函数可以是虚函数,这主要是由于对象的构造和销毁方式的不同。
2025-03-04 11:36:29
441
原创 【C++】当一个类A中没有声明任何成员变量和成员函数,sizeof(A)是多少?
在 C++ 中,即使一个类没有任何数据成员(即空类),它的大小也不会是 0,而是 1。
2025-03-04 09:04:26
244
原创 【C++】迭代器的使用
在 C++ 中,迭代器是容器(如 vector、list、map 等)访问元素的一种通用方式,可以看作是指向容器中元素的指针。
2025-03-03 14:59:00
823
原创 【C++】内联函数详解
内联函数(Inline Function) 是一种通过告知编译器将函数的代码直接插入到函数调用的地方,而不是像普通函数那样进行函数调用的一种机制。这样做的目的是提高程序的运行效率,减少函数调用的开销。
2025-02-28 15:54:12
694
原创 【C++】什么是引用
在C++中,引用是一个非常重要的概念。引用(Reference)是一个别名,它为一个已经存在的变量创建了一个新的名字。通过引用,程序可以直接操作该变量而不需要复制其值。
2025-02-28 15:23:51
347
原创 【C++】头文件防卫式声明
头文件防卫式声明(Header Guard)是一种常见的预处理指令,用于防止头文件被多次包含,从而避免在编译时出现重复定义或冲突的错误。这通常是通过在头文件中使用`#ifndef`(如果未定义)、`#define`(定义)和`#endif`(结束条件)预处理指令来实现的。
2025-02-28 15:06:54
337
原创 【C++】移动语义
C++的移动语义(Move Semantics)是C++11引入的一个特性,旨在提高程序性能,特别是在对象的临时性和资源管理方面。通过允许“移动”对象,而不是复制对象,移动语义减少了不必要的资源复制,从而提升了效率,尤其是在处理大对象或资源密集型对象时。
2025-02-28 11:27:20
914
原创 【C++】智能指针
C++智能指针(std::unique_ptr、std::shared_ptr、std::weak_ptr)通过自动管理内存,避免了内存泄漏和悬空指针问题,其中 unique_ptr独占所有权,shared_ptr共享所有权并采用引用计数,而 weak_ptr用于解决循环引用问题。
2025-02-28 10:51:51
423
原创 【C++】内存对齐机制
C++ 内存对齐机制通过确保数据按照特定字节边界存储,优化内存访问效率并避免硬件异常,程序员可以使用 alignas 和 alignof 控制对齐方式。
2025-02-28 10:42:33
368
原创 【C++】delete和 delete[]的区别
`delete` 用于释放通过 `new` 分配的单个对象内存,而 `delete[]` 用于释放通过 `new[]` 分配的数组内存,两者不能混用。
2025-02-28 10:36:43
350
原创 【C++】内存分配机制
C++ 的内存分配机制包括静态内存分配、栈内存分配和堆内存分配。栈内存管理简单,但大小有限;堆内存灵活但需要手动管理,且容易引发内存泄漏。C++11 引入的智能指针为堆内存管理提供了更安全的方式。
2025-02-28 10:32:33
756
原创 【C++】对字符串的常用操作
C++ 中的字符串操作主要通过两种方式实现:使用 C 风格的字符串(字符数组)和使用 C++ 标准库中的 `std::string` 类型。大多数现代 C++ 程序使用 `std::string` 进行字符串处理,因为它提供了许多便捷的成员函数来处理字符串操作。以下是常见的 C++ 字符串操作及其使用方法。
2025-02-27 09:52:03
940
原创 【C++】知识清单
本文列出C++初中高级程序员需要掌握的必备知识,知识清单有助于系统地整理和规划学习内容,使我们能够清晰地了解每个阶段应掌握的核心技能,避免遗漏关键知识点。
2025-02-27 09:42:05
771
原创 【C++】异常处理机制
C++ 的异常处理机制是用来处理程序运行过程中出现的异常情况(即错误或非正常的运行时事件)。异常处理允许程序员通过结构化的方式处理错误,避免程序崩溃,同时提高程序的健壮性。C++ 中的异常处理机制由三个核心部分组成:`try`、`throw` 和 `catch`。
2025-02-27 09:26:39
911
原创 【C++】sort()排序的使用
std::sort()是 C++ 标准库中用于排序容器的算法函数,它定义在 <algorithm>头文件中。这个函数可以用于排序数组、容器或任何符合随机访问迭代器要求的序列。std::sort() 是一种基于比较的排序算法,通常基于快速排序(QuickSort)或其他算法(如堆排序、归并排序)实现。
2025-02-27 08:59:58
292
原创 【数据库】常见的数据库和它们的适用场景
常用数据库分为关系型(RDBMS)和非关系型(NoSQL)。关系型数据库如MySQL、PostgreSQL、SQL Server和Oracle适用于复杂查询、事务和企业级应用;而MongoDB、Redis等非关系型数据库适用于大数据处理、缓存和实时数据存储。关系型数据库支持ACID事务,适合需要数据一致性的场景;非关系型数据库灵活、高可扩展,适合大规模、分布式存储。选择数据库取决于应用需求、性能要求和数据模型。
2025-02-25 17:47:18
590
原创 【C++】各个版本新的特性和改进
C++ 语言自从其诞生以来,经历了多个版本的更新,每个版本都引入了新的特性和改进,目的是提升语言的表达能力、性能、安全性以及开发效率。下面是各个主要版本(从 C++98 到 C++20)的一些关键特性。
2025-02-25 14:10:04
676
原创 【C++】代码构建工具
C++ 代码构建工具自动化了编译、链接和依赖管理,简化了复杂项目的构建过程。常见工具包括 Make(适用于简单项目)、CMake(跨平台支持、大规模项目)、qmake(专为 Qt 项目设计)、Ninja(高效增量构建,适用于大型项目)。
2025-02-25 11:06:57
596
原创 【C++】代码的编译过程
C++代码的编译过程包括四个主要步骤:预处理(处理宏定义、头文件等)、编译(将代码转化为汇编语言)、汇编(将汇编语言转化为机器码目标文件),以及链接(将目标文件与库文件链接生成最终的可执行文件)。
2025-02-24 17:57:54
273
原创 【C++】命名规范总结
在C++中,命名规范是确保代码一致性、可读性和可维护性的关键。不同类型的标识符(如变量、函数、类名、常量等)应遵循不同的命名规则。以下是详细的命名规范规则,涵盖了变量、函数、类、常量、宏等常见元素。
2025-02-24 10:48:06
799
原创 【编程语言】C++与C语言的区别
C语言更适合于系统级编程,强调效率和对硬件的控制,而C++更适合于大规模软件开发,强调可维护性和灵活性。C++在C语言的基础上进行了扩展,增加了许多面向对象的特性,使得它在处理复杂的系统时具有更高的抽象能力和代码复用性。
2025-02-22 08:52:44
278
原创 【C++】const关键字的使用
在 C++ 中,const 是一个用于声明常量的关键字,表示某个值是不可更改的。它可以用于多种场景,包括常量变量、指针、成员函数等。const 提高了代码的可读性和安全性,避免了意外修改不可变数据。
2025-02-21 10:59:44
271
原创 【编程语言】委托与函数指针
C# 的委托与 C++ 的函数指针相似,都是用来指向方法,但委托提供了类型安全、多播支持和更多灵活的功能,适合更复杂的应用场景。
2025-02-21 10:26:40
429
原创 【C++】#define和const的区别
#define 是预处理器的文本替换,没有类型检查和作用域限制,而 const 是类型安全的常量,具有作用域并且由编译器检查。
2025-02-21 10:02:19
412
原创 【C++】常用的STL容器的使用场景和底层实现
C++中常用的STL容器包括vector、list、deque、set、map、unordered_set、unordered_map、stack和queue,它们根据不同的使用场景和底层实现(如动态数组、链表、哈希表、平衡二叉树等)提供高效的元素存储和操作。
2025-02-21 09:15:12
926
原创 【C++】数组与指针的区别
数组的大小在编译时确定,且数组名本质上是指向首元素的指针,无法改变指向对象。指针则可以动态指向不同对象,并支持动态内存分配。数组内存由编译器管理,而指针需要手动管理内存。数组适用于固定大小数据,指针适合处理动态数据和内存管理。
2025-02-20 09:11:13
893
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人