面试时关于c++方面的一些收获

来源:互联网 发布:图哈切夫斯基 知乎 编辑:程序博客网 时间:2024/06/06 05:58
    昨天去了一家公司面试,前面回答的挺好,但是到后来面试官问了很多关于c++的一些新特性的问题,很多都没有答上来,虽然估计面试是过不了了,但是说实话也了解了很多c++方面原来我不知道的东西,算是受益匪浅吧。    首先面试官问了我关于auto和decltype的作用和区别,auto我倒是知道,也经常用,但是关于decltype就没什么印象了,胡乱猜了一个,很明显错了。auto能够自动为变量添加类型,而decltype能够根据表达式提取出表达式返回值的类型,从而声明变量。这两个虽然功能很像,但是还是有些区别的,首先对于引用,auto获取的是引用的变量的类型,而decltype获取的是对变量类型的引用,而且,对于解引用类型,decltype获得的是引用类型。比如对于int p;decltype(*p)获取的就是int&,而不是int。还有一处区别是,对于decltype来说,如果对象名加了括号(也就是双括号),它获得的是引用类型。    之后面试官问了我关于lambda的问题,我当时lambda是就没好好看,感觉这个看起来就很奇怪的东西应该也不重要,然而面试官说lambda很流行,于是回到学校后赶紧把lambda看了一遍。    还有面试官问了我一个概念,raii(resource acquirision is initializition),资源获取时便是初始化时,对于这个概念我还是有点印象,当时隐约记得这是和智能指针有关系(《effective c++》),便回答了这个,后来面试官和我说,我说的是其中一部分,但还是不完善,raii是一种用对象来管理资源的方式,通过将资源定义在对象中,利用对象的析构函数来释放资源,从而防止资源的泄漏。也可以利用智能指针来管理资源,但最重要的就是利用编译器来帮我们释放资源,而不是手动释放资源,因为手动释放资源总会有忘记的时候,而资源泄漏很多时候是一件很严重的事。    还有一些其他的概念,比如泛型编程之类的,但是这些也不是短时间就可以完全掌握的,所以就不写在文章里面了。
0 0