- 博客(20)
- 收藏
- 关注
原创 类型别名和using声明(一)
类型别名是为已经存在名字的类型定义一个新的名称,可以使用typedef或using关键字来定义。using声明可以引入一个命名空间中的特定名称到当前的作用域,或者为模板类型定义一个别名。什么是C++中类型别名和using声明。如何使用类型别名和 using 声明?
2024-11-24 18:20:06
336
原创 初始化列表一
初始化列表在进入构建函数体之前就对成员变量进行初始化,效率更高。对于一些需要在构造函数体内进行复杂计算的成员变量,可以现在初始化列表中进行默认初始化,然后在构造函数体内进行赋值,但对于const成员变量和引用成员变量,只能使用初始化列表进行初始化。作用是在对象创建时,对成员变量进行初始化,特别是对于const成员变量,引用成员变量。初始化列表是在构造函数的参数列表后面,用冒号开头,接着列出成员变量的初始化表达式。和没有默认构造函数的成员对象,必须使用初始化列表进行初始化。什么是 C++ 中的初始化列表?
2024-11-21 20:15:19
369
原创 内联函数的知识
内联函数在编译时展开,没有函数调用的开销,但可能会增加代码的体积。可以在函数声明前加上“inline”关键字来定义内联函数。特别是对于一些小的频繁调用的函数,使用内联函数可以显著提高性能。普通函数在运行时进行调用,有一定的调用开销,但代码更加的紧凑。·内联函数是在编译时将函数体插入到调用处的函数。作用是减少函数调用的开销,提高程序的执行效率。什么是 C++ 内联函数?在使用时与普通函数一样调用即可。内联函数与普通函数有什么区别?如何定义和使用内联函数?
2024-11-17 23:53:02
400
原创 类型转换的知识点整理
有隐式类型转换和显式类型转换,隐式类型转换是由编译器自动进行的,例如将小范围整数类型自动转化为大范围整数类型,显示类型转换包括强制类型转换运算符。它们之间的区别:static_cast用于进行比较安全的类型转换,如基本数据类型之间的转换,父类指针向子类指针的转换(有一定的限制)。例如:将一个指向派生类对象的指针用reinterpret_cast转化为指向基类对象的指针然后调用基类的函数可能会导致错误的结果。reinterpret_cast:用于惊醒低层次的,不安全的类型转换,只是简单的重新解释二进制。
2024-11-17 17:10:59
329
原创 常量表达式
如果一个表达式只包含常量值,字面量,常量表达式函数调用的方式,并在编译期间可以确定其值,那么他就是常量表达式。常量表达式是在编译期间可以求值的表达式,其值再次发生改变只表示这一个值。在这段代码中常量表达式就是size,所以可以直接用来定义数组大小。编译器会根据表达式的上下文和语法规则来判断是否为常量表达式。可以用于定义数组大小,初始化常量对象,在模板参数中使用。例如:字面值常量和初始化常量对象都是常量表达式。如何判断一个表达式是否是常量表达式?什么是C++中的常量表达式?常量表达式有哪些用途?
2024-11-15 23:12:22
560
原创 程序异常的知识点一
当程序遇到无法再正常流程中处理的错误情况时,例如:文件无法打开,内存分配失败,网络连接中断,都可以使用异常处理来确保程序的稳定性与可靠性,而不是简单地终止程序。在try块防止可能抛出的异常代码,当异常被抛出时,程序流程立即转移到相应的catch块进行处理。2.什么情况下应该使用异常处理?异常处理的优缺点是什么?c++中异常处理通过try-catch来处理异常。1.C++ 中的异常处理机制是怎样的?
2024-11-13 23:26:31
256
原创 关于c++命名空间的定义与作用
控制标识符的可见性:通过命名空间,可以控制哪些标识符在其他代码文件中是可见的,哪些是隐藏的。在一个命名空间中定义的标识符,如果没有被导出或使用 using 指令引入,在其他命名空间中是无法直接访问的,这样可以实现信息隐藏和封装,增强代码的安全性和稳定性。避免命名冲突:不同的库或者代码可能存在相同的变量与函数,命名空间可以将他隔离开,使得同名的实体在各自的空间中有不同的作用域。C++ 中的命名空间是允许嵌套的 嵌套的命名空间可以进一步组织和细分代码,使其结构更加清晰,层次更加分明。交代命名空间是否允许嵌套?
2024-11-13 17:48:34
750
原创 关于C++模板相关的知识
可以提高代码的复用性并且降低代码的重复性,使代码看上去更加的简洁,并且增强了程序的灵活性。函数是在函数声明前加上模板参数列表来定义,调用的时候会根据数据类型自动的推导模板参数。类模板是在定义类时使用模板参数列表,在创建对象的时候在指定具体的参数类型。模板就是一种通用的编程技术,允许编写符合情形的不同数据类型的编码。有函数模板和类模板两种类型。
2024-11-09 00:17:37
302
原创 请解释new和malloc的区别,并分别解释他们用法(malloc分配失败会导致什么)
new操作符从自由存储区上为对象动态分配内存空间,而malloc函数从堆上动态分配内存。new不用手动的分配内存空间而是根据new的类型分配内存而malloc是需要手动分配内存。内存分配成功,且已经初始化,但是操作越过了内存的边界。成功时,返回的是对象类型的指针。3.内存分配成功但是没有初始化。
2024-11-06 22:06:46
392
原创 解释一下拷贝构造函数和赋值运算符重载的作用
拷贝构造函数用于创建一个新对象并用另一个已经存在的对象初始简洁一些就是两个字拷贝,即已经存在的拷贝需要创造的。赋值运算重载的参数建议写成 const当前类类型引用,否则会传值传参会有拷贝。注意:拷贝是通过同类型的对象初始化构造,而不是指针。拷贝构造函数是构造函数的⼀个重载。赋值运算符用于给已经存在的对象赋值。
2024-11-05 23:40:51
114
原创 结构体和联合体有啥区别?(附加在C和C++结构体能否包含函数)
而联合体是每个成员共用同一块空间的,联合体的大小就是所有成员中占最大空间的大小。结构体的美每个成员占用不同的空间,结构体的大小是所有成员大小的总和。在C++中结构体是可以在内部定义成员函数的。在C中结构体是不能直接包含函数的。其次最主要的便是内存问题。首先就是构造函数不同。
2024-11-03 23:59:49
344
原创 C,C++中字符串的存储方式有什么不同?外加(如何在C下比较两个字符串是否相同)
在上述代码中world被储存为{'w','o','r','l','d','\0'}虽然最后的\0是用来结束的但是在计算字符串长度的时候要算上\0的一个长度。会使用string来处理字符串,string提供了一种更高效、更安全、更便捷的字符串处理方式,不需要我们手动的指定字符串的大小。要使用strcmp来进行比较如果两个字符串相同那就会返回0;中的字符串通常是一系列字符组成的用\0来结束字符串。首先在C下我们不可以直接使用==运算符来进行比较。
2024-11-03 00:27:09
677
原创 c/c++中数组定义和初始化与数组名的含义
在一些情况下数组名可以代表整个数组例如在sizeof的用法下就表示整个数组。数组名可以作为数组第一个数据的地址。还可以利用循环来逐步初始化。
2024-11-01 23:09:58
377
原创 new和delete在C++中的作用
new还进行异常处理,如果内存分配失败(例:系统内存不够的情况下)会抛出异常。主要用于堆的动态内存分配,并且调用构造函数初始化对象。用于释放new分配的内存,调用析构函数清理对象。
2024-10-31 23:31:25
229
原创 C/C++中内存分为那些区域和存储什么内容?
有栈区,堆区,代码区,全局区/静态存储区,常量区。全局区/静态存储区:储存全局变量/静态变量。代码区:储存代码的二进制的代码形式。栈区:存储局部变量,函数参数。堆区:存储动态内存的分配。常量区:储存常量数据的。
2024-10-31 00:31:35
132
原创 解释空指针和野指针的概念
是指向地址为0的指针,不指向有效的对象(任何程序数据都不会存储在地址为 0 的内存块中 ,它是被操作系 统预留的内存块)注意在指针不在使用的时候最好设置成空指针这样可以避免其变成野指针。3. 指针指向空间释放及时置NULL。注意使用野指针可能导致程序崩溃。5. 指针在使用之前检查有效性。4. 避免返回局部变量的地址。2.指向已经释放的指针。
2024-10-31 00:29:52
329
原创 函数的参数传递方式有哪些?分别有什么特点?
引用传递:实际上就是给实参起了一个别名,因为是别名的原因所以在函数的内部进行修改那么就会的实参进行修改。指针传递:就是利用指针来间接传递实参的值,同时也可以利用指针来间接改变实参,也就是实参可以发生改变的。值传递:就是一个实参把值传递给形参,其中被传递的形参如果发生改变不会影响到实参的值,是非常简便的。缺点是:需要用到额外的空间,如果数据较大会会影响传递速度的。需要手动管理内存,包括分配和释放内存空间。不能够引用传递空值。
2024-10-27 19:39:48
553
原创 关于c/c++中的三种基本控制结构(顺序,循环,选择)的介绍
(3)选择结构:就是判断符不符合要求来执行什么代码,例如:if-else,switch-case。(2)循环结构:就是按照条件重复执行这块代码,例如for,while按照循环来进行的举个例子。(1)顺序结构:就是字如其意按照顺序来进行操作。举个例子:选出a,b两个数较大的那个值。求从5累加到100的和。
2024-10-26 15:43:27
249
原创 对什么是运算符优先级的介绍
简单来说就是在整个表达式当中先执行那个符号的运算,例如我们所熟知的乘除就优先于加减,在一些简单算数运算符中的的优先级为*,/,%,+,-,我自己认为最容易混淆的就是于指针有关的时候例如:*q++就是先取*q指向的值在使指针自增。这是整理出来的运算我自认为还是比较全的希望对你有帮助。
2024-10-25 23:24:29
172
原创 三目运算符最直观的介绍
三目运算符别看名字这样复杂其实就是表示在什么条件下该如何选择这些数据中的一个,就表示在b>c的情况下选择b,把b的值赋值给a。就这样简单的一件事。例如:int a=b>c?
2024-10-25 23:21:07
155
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅