C++ 常考面试题汇总
一、C++ 基础与语法
- 指针与引用区别:指针可以为空,可重新指向;引用必须初始化且不可重新绑定。指针的指针、多级指针和函数指针使用。常见陷阱:悬空指针、野指针、const 指针与指针 const 的区别。
- 内存模型栈 vs 堆:栈自动管理,速度快,适合局部变量;堆手动管理,需 new/delete。内存泄漏与工具检测:valgrind、asan。对象生命周期:构造、析构、拷贝构造、移动构造。
- 类型转换static_cast、dynamic_cast、const_cast、reinterpret_cast 的使用场景和安全性。
二、面向对象编程
- 类与对象成员函数、静态成员、虚函数、纯虚函数。构造函数、拷贝构造函数、移动构造函数。explicit 关键字防止隐式类型转换。常考题:为什么析构函数要声明为虚函数?
- 继承与多态公有、保护、私有继承的区别。多态实现原理:虚函数表(vtable)。菱形继承与虚继承,如何避免二义性。
- 运算符重载常用运算符重载示例:operator+、operator[]、operator<<。成员函数 vs 非成员函数重载。注意返回值类型和 const 限定。
大家假如有需要更加全面的C++ 面试题和 大厂面试题可以订阅本专栏:https://www.nowcoder.com/creation/manager/columnDetail/Mq7XW
三、内存管理与智能指针
- 动态内存管理new/delete 与 malloc/free 区别。内存泄漏、双重释放、未定义行为示例。
- 智能指针std::unique_ptr:独占所有权,禁止拷贝,可移动。std::shared_ptr:引用计数,循环引用需 std::weak_ptr。std::weak_ptr:解决 shared_ptr 循环引用问题。何时使用裸指针、何时使用智能指针。
四、STL 容器与算法
- 容器特性vector:连续内存,随机访问快,插入删除慢。list:双向链表,插入删除快,随机访问慢。deque:双端队列,支持两端高效插入。map/unordered_map:红黑树 vs 哈希表,复杂度分析。set/unordered_set:元素唯一,底层实现区别。
- 迭代器输入迭代器、输出迭代器、前向迭代器、双向迭代器、随机访问迭代器。常考题:为什么 vector 插入中间元素效率低?
- 算法sort、stable_sort、lower_bound、upper_bound、binary_search。STL 算法与 lambda 表达式结合使用。常考题:如何用 STL 统计出现次数最多的元素?
五、模板编程与泛型
- 函数模板与类模板泛型编程的基本形式。模板实例化与特化(完全特化、偏特化)。常考题:模板函数如何支持不同类型参数自动推导?
- 模板元编程constexpr、std::enable_if、类型萃取(type traits)。常考题:实现一个 is_same 类型特性或静态断言。
六、异常与错误处理
- 异常机制try / catch / throw。异常安全性:基本、强、无异常保证。析构函数抛异常的危险性。
- 错误处理策略返回值 vs 异常 vs 错误码。RAII(Resource Acquisition Is Initialization)原则保证资源释放。
七、并发与多线程
- 线程与锁std::thread 的创建与管理。互斥锁:std::mutex、std::recursive_mutex。条件变量 std::condition_variable 使用。
- 原子操作std::atomic 与 lock-free 编程。内存序(memory_order)的理解。
- 常考题如何避免死锁?生产者-消费者模型实现。
八、性能优化与底层机制
- 内存对齐与缓存优化对齐规则、结构体 padding。数据局部性与缓存命中率优化。
- 编译期优化内联函数(inline)与宏。constexpr 提前计算。
- 其他常考题深拷贝 vs 浅拷贝。std::move 与右值引用的实际应用场景。如何判断对象是否可移动?
九、C++11/14/17/20 新特性
- 右值引用与移动语义避免不必要的拷贝,提高性能。
- Lambda 表达式捕获方式:值捕获、引用捕获、隐式捕获。用于 STL 算法中的高阶函数。
- 智能指针与并发改进std::shared_ptr 与 std::weak_ptr。std::atomic 与 std::thread 改进。
- 其他auto、decltype、constexpr、structured bindings。范围 for 循环、初始化列表、std::optional、std::variant。
十、面试高频考点总结
- 指针与引用、内存管理、生命周期。
- 类与对象、继承与多态、虚函数机制。
- STL 容器特性与算法复杂度。
- 模板编程与类型萃取。
- 异常安全与 RAII。
- 并发编程、线程安全与死锁。
- C++11 及以上新特性、移动语义、lambda。
查看12道真题和解析