面经一
Posted lis-
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面经一相关的知识,希望对你有一定的参考价值。
来源:https://www.nowcoder.com/discuss/57978
如何消除隐式转换?
面经解释:使用explicit关键字进行修饰
自己补充:explicit关键字修饰,一般来说加了肯定比不加好,主要用来针对隐式的强转
例子:
class A{ public: A(const string &a ):x(a),y(0),z(0); int compare_to(A z){ return this.x>z.x; } string x; int y,z; } int main(){ A z; z.compare_to("123"); //这里因为拷贝构造函数只是一个string ,会隐式的创建成 A对象,一般根据业务的需要判断要不要着这种强转 }
重载,重写和隐藏的区别?
面经解释:重载:即函数重载
重写【覆盖】:即用于虚函数
隐藏:只要派生类的函数名与基类相同就会隐藏
补充:
重载作用域只是限于同一个类中,然后要求是参数列表和原来的有所不同,无论是类型还是个数,返回值无所谓
重写作用域发生在不同类中,限于父类中加了virual关键字,然后子类重写,要求名字参数列表返回值都完全一样,只能修改执行体,重写完这个函数默认属于父类
隐藏作用域发生在不同类中,要求只要名字一样,实现出来,就会隐藏掉父类中的方法,无法调用
volatile表示什么?有什么作用?
面经解释:易变的,不会被编译器进行优化,让程序取数据直接去内存中的。
补充:编译器有些时候会自带一些优化,把没有必要的一些代码给优化掉,编译器每次取值会优先从缓存里面去读取,如果是多线程和汇编的一些命令情况下,缓存会来不及修改
而产生错误,所以我们要表明这个变量是经常改变的, 所以我们让他略过这个去缓存的过程直接去内存取值
Malloc和new的区别?
面经解释:
New:
内存分配错误时,抛出bad_alloc异常,可以定义set_new_handler函数来在产生异常时进行处理;本身是一个运算符;分配内存的地方为自由存储区【为一个抽象概念】;对于对象而言,会先申请内存空间然后调用构造函数;无需指定大小
Malloc:
内存分配错误时,返回NULL;本身是一个库函数;分配内存的地方为堆;只申请内存空间;需要指定申请多大的内存;
free和delete的区别?
Delete:
本身是一个运算符
Free:
本身是一个库函数
free一个数组时如何知道要释放多大的内存呢?
一般在数组前面几个字节中存在某一个结构体来保存当前申请的数组大小。
引用和指针的区别?
指针:是一个变量类型;指针可以不进行初始化;指针初始化后可以改变,在写代码时需要大量的检测
引用:是一个别名;引用必须要初始化;引用初始化后不可改变,无需检测
以上是关于面经一的主要内容,如果未能解决你的问题,请参考以下文章