
今天开始了模拟面试,然后被虐惨了,于是来做个总结。
Question One:什么是static关键字?
我心想,这还不简单吗?声明静态变量、函数的关键字啊。然后我就这么说了,然后就没然后了。
事后,我看了一下标准回答,大致是这样的,我复述一遍,不然就被举报抄袭了。
1、在变量前加上该关键字,变量就变成了静态变量。
2、未经初始化的静态变量默认为0。
3、静态变量存储在静态存储区,在整个程序运行的过程中一直存在。
4、如果是全局静态变量,则只在声明它的文件中可见,准确的说,是从声明开始,到文件结束。
5、如果是局部静态变量,作用域仍是局部作用域。
但是当作用域结束,局部静态变量依旧保存在静态存储区中,只是我们无法访问,直到函数再次被调用,其值不变。
6、静态函数。静态函数的定义和声明默认都是extern的。
7、函数的实现使用static修饰,那么这个函数只可在本cpp内使用,不会同其他cpp中的同名函数引起冲突。
8、不要再头文件中声明static的全局函数,不要在源文件内声明非static的全局函数。
9、类的静态成员。在类中,静态成员可以实现多个对象之间的数据共享,而且还安全。对多个对象来说,静态数据成员只存储一处,供所有对象共用。
10、静态成员函数和静态数据成员一样,它们都属于类的静态成员,它们**都不是对象成员**。因此,对静态成员的引用不需要用对象名。
够多吧,我顶多答了三四条。
Question Two:什么是野指针?
好,我巴拉巴拉的讲了一大堆,顺带还扯上了智能指针,虽然我也没用过智能指针。
野指针就是指向一个已删除的对象或者未申请访问受限内存区域的指针
以上是我碰到过的,以下是我还没碰到的(我总不能每一题都在无准备情况下作答吧!!!)
Question Three:说一说c++中四种cast转换
说实话,cast转换我只用过几次,我只知道它跟const脱不了干系。
1、const_cast
用于将const变量转为非const
2、static_cast
用于各种隐式转换,比如非const转const,void*转指针等
3、dynamic_cast(不是很懂)
用于动态类型转换。只能用于含有虚函数的类。
向上转换:指的是子类向基类的转换
向下转换:指的是基类向子类的转换
4、reinterpret_cast(这个更没听说过了)
几乎什么都可以转,比如将int转指针,可能会出问题,尽量少用;
5、为什么不使用C的强制转换?
C的强制转换表面上看起来功能强大什么都能转,但是转化不够明确,不能进行错误检查,容易出错。
看这里:

我珍藏很久的了。
Question Four: 请说一下C/C++ 中指针和引用的区别?
1、指针有自己的一块儿空间,而引用只是个别名。使用sizeof看一个指针的大小是4,而引用则是被引用对象的大小;
2、指针可以被初始化为NULL,而引用必须被初始化且必须是一个已有对象的引用;
3、指针在使用中可以指向其它对象,但是引用只能是一个对象的引用,不能被改变;
Question Five:智能指针
当两个对象相互使用一个shared_ptr成员变量指向对方,会造成循环引用,使引用计数失效,从而导致内存泄漏。