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

相关推荐
无敌最俊朗@20 小时前
C++ 序列容器深度解析:vector、deque 与 list
开发语言·数据结构·数据库·c++·qt·list
MOON404☾20 小时前
基于TCP的简易端口扫描器
网络·tcp/ip·php
Humbunklung21 小时前
VC++ 使用OpenSSL创建RSA密钥PEM文件
开发语言·c++·openssl
Humbunklung21 小时前
填坑:VC++ 采用OpenSSL 3.0接口方式生成RSA密钥
开发语言·c++·rsa·openssl 3.0
Larry_Yanan21 小时前
QML学习笔记(十五)QML的信号处理器(MouseArea)
c++·笔记·qt·学习·ui
努力学习的小廉1 天前
我爱学算法之—— 模拟(下)
c++·算法
Larry_Yanan1 天前
QML学习笔记(十七)QML的属性变更信号
javascript·c++·笔记·qt·学习·ui
hsjkdhs1 天前
C++之拷贝构造(浅拷贝与深拷贝)、this指针、内联函数
c++
默|笙1 天前
【c++】红黑树的部分实现
开发语言·c++
轩情吖1 天前
Qt常用控件之QSpinBox
开发语言·c++·qt·控件·桌面级开发·qspinbox·微调框