自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 怎么理解TCP传输协议是面向字节流的协议?如何解决粘包?

当用户通过TCP协议发送消息的时候,消息可能会被操作系统分组成多个的TCP报文,也就是一个完整的用户消息被拆分为多个TCP报文进行传输,这时如果接收方不知道发送方发送的长度,就无法读出一个完整的用户消息。3.自定义消息结构:我们可以自定义一个消息结构,由包头和数据组成,包头的大小是固定的,包头里有一个字段来说明之后的数据有多大,当接收方接收到包头的大小后就解析包头的内容,然后就知道数据的长度了。之所以说TCP是面向字节流的,UDP是面向报文流的,是因为操作系统对TCP和UDP协议的发送方的机制不同。

2025-06-07 22:53:32 277

原创 在 C/C++ 中,volatile 关键字的作用是什么?.volatile 关键字与 const 关键字有什么区别?

每次访问volatile变量时,都会从内存中读取(对于读取操作)或者写入到内存(对于写入操作),以确保程序能正确反映变量的实际变化。volatile关键字用于告诉编译器,被修饰的变量可能会被程序以外的因素(如硬件、操作系统等)修改,因此每次访问该变量时都应该从内从中读取他的值,而不是使用可能存在的缓存之,这在多线程编程,与硬件交互以及处理中断等场景中非常重要。对于const变量,编译器可以进行一些优化,比如将其值直接替换到使用它的地方,因为它的值是固定不变的。

2024-11-28 22:48:39 279

原创 定义和使用函数对象

也可以将函数对象作为参数传递给其他函数,比如 C++标准库中的算法。定义一个类,重载函数调用运算符operator()。可以像调用普通函数一样使用函数对象。

2024-11-27 17:49:17 198

原创 函数对象与普通函数有什么区别?

函数对象:可以更方便地与 C++标准库中的算法结合使用,因为它们可以作为参数传递给算法,并且可以满足算法对特定行为的要求。普通函数:在与算法结合使用时,可能需要通过函数指针或者 lambda 表达式来传递,相对来说没有函数对象那么直接。函数对象:可以拥有成员变量,能够保存状态信息。这使得函数对象在不同的调用之间可以记住一些数据,比如计数器等。函数对象:可以根据特定的需求进行定制,通过定义不同的成员函数和成员变量,可以实现各种复杂的行为。普通函数:一般不能保存状态,每次调用都是独立的,不具有记忆性。

2024-11-27 17:42:46 171

原创 什么是 C++ 中的移动语义?它的作用是什么?

作用是提高资源管理的效率,特别是对于大型对象或动态分配的资源,可以避免不必要的拷贝操作,缉拿少内存分配和释放的开销。移动语义是C++11引入的特性,允许将资源从一个对象转移到另一个对象,而不是传统的拷贝操作。右值引用是对右值(临时对象或即将被销毁的对象)的引用,用&&来表示。可以通过定义移动构造函数和移动赋值运算符来实现移动语义。如何使用右值引用实现移动语义?

2024-11-21 15:19:58 213

原创 什么是 C++ 中的初始化列表?它的作用是什么?

对于一些需要在构造函数体内进行复杂计算的成员变量,可以先在初始化列表中进行默认初始化,然后在构造函数体内进行赋值。作用是在对象创建时,对成员变量进行初始化,特别是对const成员变量、引用成员变量和没有默认构造函数的成员对象,必须使用初始化列表进行初始化。class Myclass{ public: Myclass(int a,int b):var1(a),var2(b){} //赋值顺序与成员变量声明顺序一致 private: int var1;初始化列表和在构造函数体内赋值有什么区别?

2024-11-20 23:13:30 324

原创 什么是 C++ 中的友元函数和友元类?友元的作用是什么?有什么注意事项?

在某些情况下,需要让特定的函数或类能够访问另一个类的私有成员,以实现特定的功能。友元函数是一个可以访问另一个类的私有和保护成员的非成员函数。友元类是一个可以访问另一个类的私有和保护成员的类。这里声明函数func和类B为类A的友元。再累的内部声明友元函数或友元类。友元会破坏类的封装性,应该谨慎使用。友元是单向的,不能传递;

2024-11-19 00:17:08 139

原创 什么是 C++ 内联函数?它的作用是什么?

特别是对于一些小的、频繁调用的函数,使用内联函数可以显著提高性能。内联函数在编译时展开,没有函数调用的开销,但可能会增加代码的体积。内联函数的定义通常放在头文件中,而普通函数的定义一般放在源文件中。可以在函数声明前加上“inline"关键字来定义内联函数。普通函数在运行时进行调用,有一定的开销,但是代码更加紧凑。内联函数是在编译时将函数体插入到调用处的函数。作用时间少函数调用的开销,提高程序的执行效率。在使用时和普通函数一样调用就行。

2024-11-17 21:49:16 366

原创 C/C++ 中有哪些类型转换方式? 分别有什么区别?

隐式类型转换由编译器自动进行,例如将小范围的正数类型自动转换为大范围的正数类型。例如,将一个指向派生类对象的指针用reinterpret_cast转换为指向基类对象的指针,然后调用基类的函数可能会导致错误的结果。隐式类型转换可能导致数据的丢失或者精度降低。用于进行比较安全的类型转化换,如基本数据类型之间的转换、父类指针指向子类指针的转换(有一定限制)。用于在运行时进行安全的向下转型(从基本指针到派生类指针),如果转换失败会返回nullptr。用于进行低层次的、不安全的类型转换,只是简单地重新解释二进制位。

2024-11-16 22:19:47 683

原创 什么是 C++ 中的常量表达式? 有什么用途?如何判断一个表达式是否是常量表达式?

3.在C++中用常量表达式初始化的const对象也是常量表达式,并且也是C++推荐的方式,C语言不是,如int const a = 5;如果初始化值是一个常量表达式,那么这个const变量就是常量表达式。//a,a1都不是常量表达式,a2是常量表达式。但是如果const变量是通过一个i函数调用或者其他运行时才能确定的操作来初始化的,那么他就不是常量表达式。3.表达式组合分析,如果碰到运算符,需要每一个参与运算的表达式都是常量表达式,那得出的结果也是常量表达式。常量表达式是指在编译期间进行求值的表达式。

2024-11-15 17:03:17 405

原创 C++函数的返回值在内存中的传递过程

1.返回值:return a;}2.返回指针:*b=2;return b;3.返回引用:*b=2;return b;

2024-11-14 21:07:43 420

原创 什么是虚拟内存,为什么要使用虚拟内存,虚拟内存可能比物理内存大吗?

虚管理技术,它在操作系统层面实现,为每个运行的进程提供了一个独立且连续的地址空间。1. **扩展内存容量**:即使物理内存有限,虚拟内存允许程序申请和使用超过实际物理内存大小的内存空间,通过将不活跃的数据暂时移到硬盘上的交换文件来实现。3. **内存碎片管理**:虚拟内存系统可以更有效地管理内存碎片,通过页面调度策略,将不常用的页面换出到硬盘,而将需要的页面调入内存,从而优化内存使用。2. **进程隔离**:每个进程拥有自己的虚拟地址空间,这保证了进程间的内存数据是相互隔离的,提高了系统的安全性。

2024-11-14 21:06:56 371

原创 C++ 中的异常处理机制是怎样的?

在try块中放置可能抛出异常的代码,当异常被抛出时,程序流程立即转移到相应的catch块中进行处理。catch(const std::exception& e) { //处理异常的代码 }C++通过try-catch块来处理异常。try{ //可能抛出异常的代码 }

2024-11-14 01:15:00 559

原创 什么情况下应该使用异常处理?异常处理的优缺点是什么?

当程序遇到无法在正常流程中处理的错误情况时,比如文件无法打开、内存分配失败、网络连接中断等,可以使用异常处理来确保程序的稳定性和可靠性,而不是简单的终止程序。能够清晰的分离正常代码和错误处理代码,提高程序的可读性和可维护性;可以在不同的层次上处理异常,实现更灵活的错误处理策略。可能会带来一点性能的开销,并且如果异常处理不当,可能会导致程序流程变得复杂难以理解。

2024-11-13 20:45:06 123

原创 什么是c++命名空间 有什么作用?

作用是避免命名冲突,尤其是在大型项目中,多个开发者可能会使用相同的标识符,例如,不同的库,可能都有一个名为”fun“ 的函数,使用命名空间可以区分它们。命名空间是一种将全局作用域划分成不同区域的机制。

2024-11-13 02:45:00 107

原创 如何定义使用命名空间?且交代命名空间是否允许嵌套?

使用时可以通过作用域解析运算符”::“来访问命名空间中的成员,如。可以使用namespace关键字定义命名空间,如。来访问嵌套命名空间中的变量。

2024-11-12 22:34:30 340

原创 C/C++ 中的预处理器指令有哪些?举例说明其用途。

有#define 定义宏、#include 包含头文件、#ifdef/#ifndef 进行条件编译等。定义了一个常量宏PI;

2024-11-09 19:45:06 106

原创 解释一下宏定义和函数调用的区别。

宏定义实在预处理阶段进行文本替换,没有类型检查,可能会导致一些意外的结果;函数调用在运行时执行,有类型检查和参数传递机制,更安全和灵活。

2024-11-09 19:44:33 136

原创 模板,如何使用模板

通过函数模板,可以编写一种通用的函数定义,使其能够适用于多种数据类型,从而提高代码的复用性和灵活性。函数模板是一个蓝图,它本身并不是函数,是编译器用使用方式产生特定具体类型函数的模具。被调用的函数模版生成了两个不同的函数,它们有着不同的函数地址。所以其实模板就是将本来应该我们做的重复的事情交给了编译器。编译器在调用时,有现成的就调用现成的,没有就套用模板。类模板名字不是真正的类,而实例化的结果才是真正的类。不同类型函数参数使用模板时,叫做函数模板的实例化。在函数名后的<>中指定模板参数的实际类型。

2024-11-08 19:50:46 217

原创 C++循环引用指的是什么,在使用过程当中需要注意什么问题

在需要引用其他对象但又不想增加引用计数的情况下,使用 std::weak_ptr。std::weak_ptr 可以通过 lock() 方法转换为 std::shared_ptr,但只有在被引用的对象仍然存在时,lock() 才会成功。父对象持有一个指向子对象的 std::shared_ptr,子对象也持有一个指向父对象的 std::shared_ptr。这种情况下,即使 A 和 B 都不再被其他对象引用,它们的引用计数也不会降为零,因此 std据_ptr 无法自动释放它们所持有的内存。

2024-11-07 21:27:29 425

原创 new或malloc在申请空间时,超出可申请的大小就会分配异常,可申请的大小是多少

其次就是操作系统,操作系统的地址空间分布决定了用户可用的最大地址空间,比如32位Windows是用户2G+内核2G的地址空间分配方式,32位Linux是用户3G+内核1G,不同操作系统的实现方式,对malloc也是有影响的。然后就是硬件,32位和64位的硬件限制肯定是不一样的,页表的支持情况(巨型页)也会对malloc有限制。把范围扩大的话,ARM/PPC/MIPS上,页表和地址空间的限制也都不完全一致。最后是当前内存使用情况,比如剩余内存,虚地址空间的碎片情况等等。该大小是不确定的受到多个因素影响。

2024-11-07 21:26:14 342

原创 解释一下拷贝构造函数和赋值运算符重载的作用

在实现赋值运算符重载时需要注意处理自我赋值的情况,以避免资源的早期释放和不一致的状态问题。赋值运算符重载在对象已经存在时调用,用于将一个对象的值赋给另一个已经存在的对象。赋值运算符重载的参数是一个对象的引用,用于赋值给另一个已经存在的对象。赋值运算符重载返回一个引用,通常返回 *this,以支持连续赋值操作。构造函数用于创建一个新对象并用另一个已经存在的对象初始化他。拷贝构造函数的参数是一个对象的引用,用于初始化新对象。赋值运算符重载用于给已经存在的对象赋值。使用一个对象给另一个已经存在的对象赋值。

2024-11-05 22:33:24 432

原创 什么是c++模板,有哪些类型的模板

模板是一种通用编程技术,允许编写可适用于不同数据类型的代码。什么是c++模板,有哪些类型的模板。有函数模板和类模板两种类型。

2024-11-05 22:32:17 118

原创 C++ 中类的三大特性是什么?请简要解释。

封装:将数据和操作封装在类中,可以通过访问修饰符控制访问权。继承允许一个类继承另一个的属性和方法,可以减少重复代码。多态是通过指针或引用调用派生类的函数实现不同的行为。C++ 中类的三大特性是什么?三大特性:封装,继承,多态。

2024-11-05 00:47:07 128

原创 什么是构造函数和析构函数?它们的作用是什么?

析构函数在对象销毁时被自动调用,用于释放对象占用的资源。什么是构造函数和析构函数?构造函数用在创建对象时进行初始化操作。

2024-11-05 00:45:20 148

原创 结构体可以包含函数吗?在 C 和 C++ 中有何不同?

在c++中可以在结构体内部定义成员函数。在c语言中结构体中不可以直接包含函数,

2024-11-03 19:35:11 225

原创 结构体和联合体有什么区别?能否在声明过程当中缺省名字?

如果缺省结构体名称,可以同时定义stu1,stu2的变量,但是后序不能再定义新的变量。联合体的所有成员共享一块内存空间,联合体的大小等于其最大成员的大小;结构体的各个成员占用不同的内存空间,总大小是所有成员大小之和;

2024-11-03 19:12:10 79

原创 C、C++中字符串的存储方式有何不同?

在c++中可以用string来存储字符串,提供了更多的功能和安全性。在c中通常用字符数组来存储字符串,并且以‘\0’来作为结束的标志。

2024-11-02 22:03:28 124

原创 如何在C下比较两个字符串是否相同?。

不能使用==来比较字符串,可以用strcmp来比较,如果返回的返回值是0的话,表示字符串相等。

2024-11-02 22:02:46 125

原创 C/C++中数组定义和初始化的方式有哪些?

可以通过指定数组大小和初始值来定义和初始化数组,也可以不指定大小,根据初始化值来确定数组的大小。也可以使用循环来进行动态初始化。

2024-11-01 20:18:40 113

原创 数组名字有什么含义?

数组名字代表数组首元素的地址,在特殊情况下如sizeof和&,数组名代表整个数组。

2024-11-01 20:15:28 99

原创 解释一下 new 和 delete 运算符在 C++ 中的作用。

delete用于释放由new分配的内存,并调用析构函数清理对象。new用于在堆区空间动态分配内存,并调用构造函数初始化对象;3、类型指针 指针变量名 = new 类型[元素个数]2、类型指针 指针变量名 = new 类型(初始值)1、类型指针 指针变量名 = new 类型。new和delete是运算符可以重载。2、delete[] 指针变量名。1、delete 指针变量名。

2024-10-31 21:57:36 93

原创 什么是内存泄漏?如何避免内存泄漏?

一次内存泄露危害可以忽略,但内存泄露堆积后果很严重,无论多少内存,迟早会被占光。最终的结果就是导致OOM(内存溢出)。内存泄漏是指程序中动态分配的内存没有得到正确的释放,导致内存资源的浪费。避免内存且楼的方法包括及时释放不再使用的动态内存、使用智能指针等。

2024-10-31 21:56:51 108

原创 解释一下空指针和野指针的概念并解释如何避免野指针?

野指针是未初始化的或者指向已经释放内存的指针,使用野指针可能导致程序崩溃。空指针是指向地址为0的指针,表示不指向任何有效对象。

2024-10-30 22:10:44 283

原创 C/C++ 中内存分为哪些区域?分别存储什么内容?

分为栈区、堆区、全局/静态存储区、常量存储区、代码区。全局/静态存储区用于存储全局变量和静态变量。栈区存储局部变量、函数参数等。代码区存储程序的二进制代码。常量存储区用于存储常量。堆区用于动态内存分配。

2024-10-30 22:10:05 314

原创 指针是什么有哪些用途?

用途包括,动态分配内存,函数参数传址,访问数组元素,实现数据结构等。指针是一个变量,他储存了一个变量的地址。

2024-10-29 21:31:12 334

原创 引用和指针有什么区别?

引用必须在初始化的时候绑定到一个对象,并且不能重新绑定。sizeof指针是指针的大小,引用则是变量的大小。引用更加安全,指针有空指针,野指针。指针需要解引用,引用编译器处理。指针可以指向空,引用不可以。指针有多级指针,引用没有。

2024-10-29 21:30:35 258

原创 什么是回调函数?有什么特点?

回调函数是一种特殊的编程技术,它允许一个函数作为参数被传递给另一个函数,并且可以在后者执行的某个特定时刻被调用。这种机制在多种编程语言中广泛使用,如回调函数通常用于事件处理、和处理各种操作系统和框架的。

2024-10-28 23:19:17 306

原创 函数参数传递的方式有哪些?分别有什么特点?

传变量的地址赋给函数里形式参数的指针,使指针指向真实的变量的地址,因为对指针所指地址的内容的改变能反映到函数外,也就是能改变函数外的变量的值。变量的值传递给函数的形式参数,实际就是用变量的值来新生成一个形式参数是,因而在函数里对形参的改变不会影响到函数外的变量的值。tips:如果利用传值的方式给函数传递参数,在函数结束之后会对新创建的对象销毁。实际是通过指针来实现的,能达到使用的效果如传址,可是使用方式如传值。

2024-10-27 20:39:46 232

原创 C/C++ 中的三种基本控制结构(顺序、选择、循环)。

顺序结构的特点就是程序的执行流程是直线型的,即从第一条语句开始,按顺序逐条执行,直到最后一条语句结束。分支结构是程序设计中的一种控制结构,它允许程序根据给定的条件选择不同的执行路径。C/C++ 中的三种基本控制结构(顺序、选择、循环)。for循环,while循环,do while循环。选择结构(分支结构)

2024-10-26 22:39:05 451

空空如也

空空如也

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

TA关注的人

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