C++ 必考八股文汇总 精选
一、基础语法与类型
- C++ 中
const和#define的区别是什么? static关键字在不同场景下的作用分别是什么?volatile关键字的作用是什么,什么场景下使用?extern关键字的作用是什么?sizeof和strlen的区别是什么?- C++ 中的引用和指针有什么区别?
- 左值和右值的区别是什么?什么是右值引用?
nullptr、NULL、0三者的区别是什么?
二、内存管理
new/delete和malloc/free的区别是什么?- 内存泄漏是什么?如何检测和避免?
- 栈内存和堆内存的区别是什么?
- 什么是内存对齐?为什么需要内存对齐?
- 智能指针有哪几种?各自的使用场景是什么?
shared_ptr的引用计数是如何实现的?weak_ptr解决了什么问题?unique_ptr为什么不能拷贝?
C++面试常考题目类型都放入了专栏了:https://www.nowcoder.com/creation/manager/columnDetail/Mq7XWW
三、面向对象
- C++ 的三大特性是什么?分别解释一下。
- 构造函数和析构函数的调用顺序是什么?
- 拷贝构造函数和赋值运算符的区别是什么?
- 什么是深拷贝和浅拷贝?
- 虚函数的实现原理是什么(vtable / vptr)?
- 纯虚函数和抽象类是什么?
- 虚析构函数的作用是什么?什么时候必须用?
- 多重继承会带来哪些问题?如何解决菱形继承?
override和final关键字的作用是什么?- 构造函数可以是虚函数吗?为什么?
- 对象的内存布局是怎样的(含虚函数表)?
四、模板与泛型
- 函数模板和类模板的区别是什么?
- 模板特化和偏特化是什么?
typename和class在模板中的区别是什么?- 什么是 SFINAE?有什么实际用途?
- 可变参数模板(variadic template)如何使用?
五、STL 容器与算法
vector的扩容机制是什么?map和unordered_map的底层实现和区别是什么?list和vector的使用场景如何选择?deque的底层结构是什么?set和multiset的区别是什么?- 迭代器失效的场景有哪些?
std::sort的底层算法是什么?时间复杂度是多少?emplace_back和push_back的区别是什么?
六、C++11/14/17 新特性
auto和decltype的区别是什么?- Lambda 表达式的捕获方式有哪些?各有什么区别?
- 移动语义和完美转发是什么?
std::move的本质是什么?它真的移动了数据吗?constexpr和const的区别是什么?- 范围 for 循环的底层实现原理是什么?
std::thread如何创建和管理线程?
七、并发与多线程
mutex、lock_guard、unique_lock的区别是什么?- 什么是死锁?如何避免死锁?
std::atomic的作用是什么?和mutex相比有什么优劣?
查看15道真题和解析