一、基础必考:变量、类型与运算符
-
数据类型与转换
-
constvsconstexpr:const是运行时/编译时常量;constexpr必须是编译时常量(C++11)。 -
auto与decltype:auto推导变量类型;decltype推导表达式类型(不计算表达式)。 -
强制类型转换 :重点区分
static_cast(编译期安全转换)、dynamic_cast(运行时多态转换,含安全检查)、const_cast(移除 const)和reinterpret_cast(危险的低级重解释)。
-
-
引用与指针(高频陷阱)
-
引用 (
&):别名,必须初始化,不能为空,不能更换目标。 -
指针 (
*) :存储地址的变量,可以为nullptr。 -
常引用 (
const T&):万能参数,可接受临时对象(右值)。
-
-
作用域与生命周期
-
static:静态局部变量(只初始化一次,生命周期贯穿程序)。 -
extern:声明外部文件定义的全局变量。
-
二、核心语法:函数与面向对象
-
函数重载与默认参数
-
重载规则 :函数名相同,参数类型或个数不同(返回值不同不算重载)。
-
默认参数 :必须从右向左连续设置。
-
-
类与对象(OOP 核心)
-
三大特性 :封装(
private/public)、继承(public/protected/private继承)、多态(虚函数)。 -
构造函数/析构函数:构造函数可重载;析构函数必须虚(如果基类有虚函数)。
-
初始化列表 :必须用于初始化
const成员、引用成员、无默认构造的类成员。 -
explicit:禁止隐式单参数构造函数转换(如MyClass obj = 10;会被禁止)。
-
-
动态内存管理(常考改错题)
-
new/delete:成对使用。 -
new[]/delete[]:数组版本必须配对,否则内存泄漏或未定义行为。
-
三、进阶难点:模板与标准库
-
模板基础
-
函数模板 :
template <typename T> T max(T a, T b) -
类模板 :
template <class T> class Stack {} -
特化:针对特定类型提供特殊实现。
-
-
STL 容器与迭代器
-
顺序容器 :
vector(动态数组)、list(链表)、deque(双端队列)。 -
关联容器 :
map(红黑树,键值对)、set(集合)。 -
迭代器失效 :
vector插入/删除元素可能导致迭代器失效(必考坑点)。
-
-
智能指针(C++11 重点)
-
unique_ptr:独占所有权,不能拷贝,只能移动。 -
shared_ptr:共享所有权,引用计数。 -
weak_ptr:解决shared_ptr循环引用问题。
-
四、易错题与避坑指南
-
浅拷贝 vs 深拷贝
- 默认拷贝构造函数是浅拷贝 (直接复制指针)。如果类内有动态内存,必须手动实现深拷贝(复制指针指向的内容)。
-
虚函数表(vtable)
- 只有虚函数会进入虚函数表。纯虚函数(
=0)使类成为抽象类,不能实例化。
- 只有虚函数会进入虚函数表。纯虚函数(
-
const成员函数- 声明为
const的成员函数,不能修改类的非mutable成员变量。
- 声明为
五、考前速查表(必背)
| 语法点 | 核心规则/易错点 |
|---|---|
| 引用 | 必须初始化,是别名 |
**const** |
const在 *左边指内容不可变,在右边指指针不可变 |
| 虚函数 | 基类析构函数必须为虚函数 |
vector迭代器失效 |
push_back可能导致迭代器失效 |
**new/delete** |
必须配对,数组用 new[]/delete[] |
**static** |
静态成员变量需在类外单独定义 |