【C++八股文】基础知识篇

一、内存与变量特性

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++八股文(完整版)<<

相关推荐
木子n115 小时前
车载以太网与SOME/IP服务化通信实战-01.从字节到服务:SOME/IP报文解析与四通道开销账
网络·网络协议·tcp/ip·车载以太网·some/ip
weiabc16 小时前
MSYS2 UCRT64 + g++ C++ 中文输出乱码 完整全过程
c++
灯澜忆梦17 小时前
【面向对象编程C++】| 基础语法
java·c++·算法
aqiu11111118 小时前
【C++算法打怪专栏】LeetCode 165. 比较版本号(双指针与字符串流法)
c++·算法·leetcode
chenbingjie_c19 小时前
C++ STL 适配器:stack & queue,从 vector/list 到 deque 深度解析
数据结构·c++
沫璃染墨20 小时前
从零入门计算机网络系列(一):计算机网络初识——从网络发展史到TCP/IP协议》
linux·网络·网络协议·tcp/ip·计算机网络
是个西兰花21 小时前
TCP套接字编程实战:从服务器搭建到多进程处理
服务器·网络协议·tcp/ip
易观Analysys1 天前
AI时代IP产业的价值重构与生态版图
人工智能·tcp/ip·重构
hetao17338371 天前
2026-10-08 hetao1733837 的刷题记录
c++·算法
Frank_refuel1 天前
【C++】智能指针
开发语言·c++