一、内存与变量特性
1.1 volatile
关键字
核心作用
- 强制编译器每次访问变量时从内存读取,禁止寄存器缓存优化
- 适用场景:
- 硬件寄存器交互(如状态寄存器)
- 多线程共享变量(需配合互斥锁使用)
- 信号处理函数与中断服务例程
实现原理
cpp
volatile int* hardware_reg = (volatile int*)0x4000; // 内存映射I/O
*hardware_reg = 0x01; // 每次操作直接访问物理内存
1.2 const
关键字
多维应用
修饰对象 | 行为特性 | 存储位置 |
---|---|---|
全局变量 | 只读,存储于静态区 | 静态数据区 |
局部变量 | 块内只读,存储于栈区 | 栈区 |
成员函数 | 禁止修改对象状态(需mutable 修饰可变成员) |
代码段 |
指针组合 | const int* (数据不可变) vs int* const (指针不可变) |
指针存储区 |
与#define
对比
cpp
// const版本(类型安全,作用域可控)
const int MAX_LEN = 100;
// #define版本(无类型检查,易产生宏污染)
#define MAX_LEN 100
>>>C/C++入门及练手项目<<<
二、函数与代码优化
2.1 内联函数 vs 宏定义
特性对比表
特性 | 内联函数 | 宏定义 |
---|---|---|
展开阶段 | 编译期 | 预处理期 |
类型检查 | 支持 | 不支持 |
调试支持 | 可调试 | 不可调试 |
作用域 | 遵循C++作用域规则 | 全局污染 |
代码膨胀风险 | 编译器可控制 | 必然展开 |
最佳实践
cpp
// 推荐内联实现
inline int square(int x) { return x*x; }
// 避免复杂宏
#define SQUARE(x) ((x)*(x)) // 易引发副作用
2.2 static
关键字
多场景应用
cpp
// 静态局部变量(保持状态)
void counter() {
static int count = 0; // 仅初始化一次
++count;
}
// 静态成员变量(类共享)
class Singleton {
public:
static Singleton& getInstance() {
static Singleton instance; // 线程安全(C++11)
return instance;
}
private:
static int count; // 静态数据成员
};
三、内存管理机制
3.1 new/delete
vs malloc/free
对比维度
特性 | new/delete | malloc/free |
---|---|---|
类型安全 | 类型检查,自动计算大小 | 需手动计算,类型转换 |
构造/析构 | 自动调用构造/析构函数 | 不执行 |
错误处理 | 抛出bad_alloc 异常 |
返回NULL |
重载支持 | 支持运算符重载 | 不支持 |
代码示例
cpp
// 智能内存管理
int* arr = new int[10](); // 值初始化
delete[] arr;
// 传统C风格分配
int* raw = (int*)malloc(10*sizeof(int));
free(raw);
四、面向对象特性
4.1 多态实现机制
动态多态实现流程

虚函数表结构
虚函数索引 | 函数地址 |
---|---|
0 | Base::vfunc1() |
1 | Derived::vfunc2() |
4.2 拷贝控制
三/五法则应用
cpp
class ResourceHolder {
public:
ResourceHolder() = default;
~ResourceHolder() = default;
// 禁用拷贝构造和赋值
ResourceHolder(const ResourceHolder&) = delete;
ResourceHolder& operator=(const ResourceHolder&) = delete;
// 移动语义
ResourceHolder(ResourceHolder&&) noexcept = default;
ResourceHolder& operator=(ResourceHolder&&) noexcept = default;
};
五、并发与系统编程
5.1 线程同步机制
同步原语对比
类型 | 实现方式 | 适用场景 |
---|---|---|
互斥锁 | 临界区保护 | 共享资源访问 |
读写锁 | 读优先/写优先策略 | 读多写少场景 |
条件变量 | 线程间通信 | 生产者-消费者模型 |
信号量 | 计数器控制 | 资源池管理 |
5.2 进程间通信
IPC方式对比
方式 | 特点 | 适用场景 |
---|---|---|
管道 | 流式传输,单工/半双工 | 进程间数据流传输 |
消息队列 | 消息结构化,异步通信 | 分布式系统组件交互 |
共享内存 | 零拷贝,高性能 | 大数据量实时交换 |
套接字 | 跨网络通信,协议支持 | 分布式服务通信 |
六、进阶特性解析
6.1 右值引用与移动语义
移动构造函数实现
cpp
class Movable {
public:
Movable(Movable&& other) noexcept
: data_(std::move(other.data_)) {
other.data_ = nullptr;
}
private:
std::unique_ptr<int> data_;
};
6.2 模板元编程
编译期计算示例
cpp
template<int N>
struct Factorial {
static const int value = N * Factorial<N-1>::value;
};
template<>
struct Factorial<0> {
static const int value = 1;
};
// 编译期计算5!
constexpr int result = Factorial<5>::value;
七、网络与协议
7.1 TCP与UDP对比
特性 | TCP | UDP |
---|---|---|
连接类型 | 面向连接 | 无连接 |
可靠性 | 确认机制+重传 | 尽力而为 |
传输效率 | 较低(握手/确认) | 高 |
应用场景 | 文件传输、Web | 实时音视频、DNS查询 |
7.2 HTTP/HTTPS差异
安全增强机制

八、数据结构与算法
8.1 B树与B+树
结构对比
特性 | B树 | B+树 |
---|---|---|
数据存储 | 内部节点存储数据 | 仅叶子节点存储数据 |
查询效率 | 稳定O(log n) | 更优范围查询 |
磁盘I/O | 每层节点访问 | 仅需叶子节点遍历 |
8.2 快速排序优化
三数取中法实现
cpp
int partition(vector<int>& arr, int low, int high) {
// 选取枢轴值
int mid = low + (high - low)/2;
if (arr[mid] < arr[low]) swap(arr[mid], arr[low]);
if (arr[high] < arr[low]) swap(arr[high], arr[low]);
if (arr[mid] < arr[high]) swap(arr[mid], arr[high]);
int pivot = arr[high];
// 分区操作...
}
完整C++后端八股文:>> C++八股文(完整版)<<