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的依赖问题。

全部评论

相关推荐

2 15 评论
分享
牛客网
牛客企业服务