C++面经

我把上述题目当成试卷,写一下答案哈

1. C++中的构造函数和析构函数有什么区别?

答:「构造函数」用于对象构造时的初始化工作,「析构函数」用来做对象销毁时的工作。

2. 解释一下C++中的拷贝构造函数和移动构造函数。

答:「拷贝构造函数」是用于创建对象的一个副本,拷贝构造函数得函数名和类名相同,参数类型与当前类相同,并通过引用得方式传递。

「移动构造函数」是将资源所有权进行转移,这样的话可以减少开销,省去了创建副本,和释放另一个对象的开销。

3. C++中的模板是什么?它的优缺点是什么?

答:「优点」:代码复用,避免编写重复代码;类型安全:在编译时会进行安全检测。

「缺点」:错误信息复杂,不便于调试。

4. C++中的静态成员与非静态成员有什么区别?

答:1) 非静态成员可以调用成员变量和成员函数,非静态成员则不可以,它没有this指针。

2) 非静态成员函数可以使用virtual函数修饰,静态成员则不可以。

3) 调用时静态成员函数时,必须实例化对象才可以对象,而静态成员通过类名即可直接调用。

5. 解释一下C++中的命名空间(namespace)。

答:我了解到的是它用于避免命名冲突,尤其是在大项目中,命名空间尤为重要。

6. C++中如何实现一个简单的链表?

答:通过结构,定义一个值和一个后继指针即可。

7. C++中的虚函数表(vtable)是什么?

答:它用于存储虚函数的地址,当发生动态绑定时,虚指针vptr就会去查询虚表vtable。

8. C++中的异常处理机制是如何工作的?

答:通过try - catch

9. C++中如何使用std::thread创建和管理线程?

答:thread t1(函数地址,参数);通过join回收线程。

10. 解释一下C++中的多态性及其实现方式。

答:多态通俗讲就是允许基类指针指向派生类指针,通过基类指针,在运行时调用具体指向的对象;总之是通过继承的方式,并需要

virtual关键字修饰,派生类重写。

11. C++中的const修饰符有什么作用?

答:const修饰的变量只读。

12. C++中如何使用std::map和std::unordered_map?

答:map的底层实现是红黑树, 有序不重复,适用于数据有序的场景。

unordered_map的底层是哈希表,适用于查询频繁的场景。

13. 解释一下C++中的函数重载和运算符重载。

答:「函数重载」,函数名相同,参数列表不同,包括参数个数、参数顺序等不同。

「运算符重载」只能重载已有的运算符。

14. C++中如何实现一个简单的计数器类?

答:需要有一个成员变量存储计数,有两个成员函数分别是加1和减一。

15. C++中的内存泄漏是什么,如何防止?

答:内存泄漏,一般指的是堆内存泄漏;当指针对象使用完毕后,要及时释放,或则用一个变量计数,当申请一块内存时 + 1,释放时 - 1,

最后打印这个变量是否为0,查看内存是否泄漏;最根本的解决方式,我认为最好使用智能指针。

16. 解释一下C++中的智能指针的使用场景。

答:auto_ptr好像已经不用了,我也没过多了解。

unique_ptr : 独占式指针,同一时刻只能有一个指针指向同一个对象。

shared_ptr这个是共享式指针,同一个时刻可以有多个指针指向同一个对象

weak_ptr : 用来解决shared_ptr相互引用导致的死锁问题。

17. C++中如何使用std::deque?

答:deque是双端队列,两端都可以插入,也都可以出队。

18. C++中的范围for循环是什么,如何使用?

答 : vector<int> nums;

for (int num : nums) {

cout << num << endl;

}

19. C++中如何实现一个简单的状态模式?

答:不太懂

20. 解释一下C++中的动态内存分配和释放。

答:内存分配就是分配一块空闲的内存来存储数据。当释放时,将这块内存的使用权拿走。

21. C++中如何使用std::unordered_set?

答:std::unordered_set底层是哈希表,通过迭代器获取和修改数据。

22. C++中的函数模板和类模板有什么区别?

答:函数模板是与「类型无关」的函数

类模板是与「类型无关」的类

23. 解释一下C++中的类型限制(SFINAE)。

答:不太懂

24. C++中如何实现一个简单的二叉树?

答:设计一个结构体,包括值,以及左右孩子。

25. C++中的std::function有什么用?

答:它是一个可调用对象包装器,可以将不同的函数包装成统一的调用方式。可调用对象包括普通函数,仿函数、静态成员函数,成员函数(需要

与bind搭配使用才可以)四类。

26. C++中如何使用std::condition_variable进行线程同步?

答:不太懂

27. 解释一下C++中的类型安全(type safety)。

答:类型安全很大程度上等价于内存安全,指是否使用未授权的内存区域。

28. C++中如何实现一个简单的优先队列?

答:通过堆数据结构实现。

29. C++中的std::string与C风格字符串有什么区别?

答:string其实是对C风格字符串的封装,使用起来更加方便,它是可变长字符串。

30. 解释一下C++中的尾返回类型(trailing return type)。

答:不太懂

31. C++中如何使用std::tuple?

答:例如vector<tuple<int, int, int>> nums;

获取数据 nums[0].get(1);

32. C++中的可变参数模板(variadic templates)是什么?

答:不太懂

33. 解释一下C++中的委托构造函数(delegating constructors)。

答:复用已经存在的构造函数代码

34. C++中如何实现一个简单的图遍历算法?

答:bfs和dfs

35. C++中的std::shared_ptr与std::weak_ptr有什么关系?

答:std::weak_ptr用于解决std::shared_ptr的依赖问题。

全部评论
这是哪家公司的面经,感觉问的问题都挺在点上
点赞 回复 分享
发布于 2024-10-23 23:07 四川

相关推荐

不愿透露姓名的神秘牛友
昨天 12:31
以前小时候我最痛恨出轨、偷情的人,无论男女,为什么会出轨?现在我成了自己最讨厌的人,没想到分享的东西在牛客会被这么多人看,大家的评价都很中肯,我也认同,想过一一回复,但我还是收声了,我想我应该说说这件事,这件事一直压在我心里,是个很大的心结,上面说了人为什么出轨,我大概能明白了。我们大一下半年开始恋爱,开始恋爱,我给出了我铭记3年的承诺,我对她好一辈子,我永远不会背叛,我责任心太重,我觉得跟了我,我就要照顾她一辈子,我们在一起3年我都没有碰过她,她说往东我就往东,她说什么我做什么,她要我干什么,我就干什么!在学校很美好,中途也出过一些小插曲,比如男闺蜜、男闺蜜2号等等等。但我都强迫她改掉了,我...
牛客刘北:两个缺爱的人是没有办法好好在一起的,但世界上哪有什么是非对错?你后悔你们在一起了,但是刚刚在一起的美好也是真的呀,因为其他人的出现,你开始想要了最开始的自己,你的确对不起自己,21岁的你望高物远,你完全可以不谈恋爱,去过你想要的生活,你向往自由,在一起之后,你要想的不是一个人,而是两个人,你不是变心了,就像你说的,你受够了,你不想包容了,冷静几天是你最优的选择,爱人先爱己。
社会教会你的第一课
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-10 14:00
林子大了什么鸟都有啊,我觉得我说的已经很客气了,阴阳谁呢
牛客62656195...:应该不是阴阳吧?你第一次注册的时候boss就说你是牛人
点赞 评论 收藏
分享
程序员小白条:这比例牛逼,750:1
点赞 评论 收藏
分享
鬼迹人途:你去投一投尚游游戏,服务器一面,第一个图算法,做完了给你一个策略题,你给出方案他就提出低概率问题,答不上当场给你挂
点赞 评论 收藏
分享
评论
5
36
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务