栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

大厂常见面试题----C++篇(2)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

大厂常见面试题----C++篇(2)

文章目录

1.关键字static的作用?2.什么是内存泄漏?面对内存泄漏和指针越界,你有那些方法?3.定义和声明的区别?4.静态绑定和动态绑定的介绍?5.引用作为函数参数以及返回值的好处?

1.关键字static的作用?

(1)函数体内:static修饰的局部变量作用范围为该函数体,不同auto变量,其内存只被分配一次,因此其值在下次调用的时候维持了上次的值。
(2)模块内:static修饰全局变量或全局函数,可以被模块内的所有函数访问,但是不能被模块外的其他函数访问,使用范围限制在声明它的模块内。
(3)类中:修饰成员变量,表示该变量属于整个类所有,对类的所有对象只有一份拷贝
(4)类中:修饰成员函数,表示该函数属于整个类所有,不接受this指针,只能访问类中的static成员变量。
注意:与const的区别,const强调值不能被修改,而static强调唯一的拷贝,对所有类的对象。

2.什么是内存泄漏?面对内存泄漏和指针越界,你有那些方法?

(1)动态分配内存所开辟的空间,在使用完毕后未手动释放,导致一直占据该内存,即为内存泄漏
(2)方法:malloc/free要配套使用,对指针赋值的时候应该注意被赋值的指针是否需要释放;使用的时候记得指针的长度,防止越界。

3.定义和声明的区别?

(1)声明是告诉编译器变量的类型和名字,不会为变量分配空间。
(2)定义需要分配空间,同一个变量可以被声明多次,但是只能被定义一次

4.静态绑定和动态绑定的介绍?

静态绑定和动态绑定是C++多态性的一种特性。
(1)对象的静态类型和动态类型
静态类型:对象在声明时采用的类型,在编译时确定
动态类型:当前对象所指的类型,在运行期决定,对象的动态类型可变,静态类型无法更改。
(2)静态绑定和动态绑定
静态绑定:绑定的是对象的动态类型,函数依赖于对象的动态类型,在运行期确定。
动态绑定:绑定的是对象的动态类型,函数依赖于对象的动态类型,在运行期确定
只有虚函数才使用的是动态绑定,其余的全部是静态绑定。

5.引用作为函数参数以及返回值的好处?

对比值传递,引用传参的好处:
(1)在函数内部可以对此函数进行修改。
(2)提高函数调用和运行的效率(所以没有了传值和生成副本的时间和空间消耗)
值传递:
形参是实参的拷贝,改变形参的值并不会影响外部实参的值。从被调用函数的角度来说,值传递是单向的(实参-》形参),参数 的值只能传入,不能传出。当函数内部需要修改参数,并且不希望这个改变影响调用者,采用值传递。
指针传递:
形参为指向实参地址的指针,当对形参的指向操作时,就相当于对实参本身进行的操作。
引用传递:
形参相当于是实参的“别名”,对形参的操作其实就是对实参的操作,在引用传递的过程,被调函数的形式参数虽然也作为局部变量在栈中开辟了内存空间,但是这时存放的是由主调函数放进来的实参变量的地址。被调函数对形参的任何操作都被处理成间接寻址,即通过栈中存放的地址访问主调函数中的实参变量。正因为如此,被调函数对形参做的任何操作都影响了主调函数中的实参变量。
用引用作为返回值最大的好处就是在内存中不产生被返回值的副本。
但是仍有以下的限制:
(1)不能反回局部变量的引用。因为函数返回以后局部变量就会被销毁
(2)不能反回函数内部new分配的内存的引用。虽然不存在局部变量的被动销毁问题,可对于这种情况(反回函数内部new分配内存的引用),又面临其它尴尬局面。例如:被函数返回的引用只是作为一个临时变量出现,而没有被赋予一个实际的变量,那么这个引用所指向的空间(由new分配)就无法释放,造成memory leak
(3)可以返回类成员的引用,但是最好是const。因为如果其他对象可以获得该属性的非常量的引用,那么对该属性的单纯赋值就会破坏业务规则的完整性。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/767881.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号