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

相关推荐
LCG米2 小时前
STM32驱动W5500以太网模块实测:TCP吞吐瓶颈定位、TX指针回绕陷阱与断线重连保活落地
stm32·单片机·嵌入式硬件·tcp/ip
chari克里2 小时前
QT5.15.2 + msvc2022部署全流程说明(windows可联网环境)
开发语言·c++·qt
码匠许师傅3 小时前
【C++三方组件】mbedTLS:面向嵌入式的轻量 TLS
开发语言·c++
Tel199253080043 小时前
温度湿度信号转WiFi/MQTT/Modbus TCP采集模块 无线传输
网络·网络协议·tcp/ip·工业自动化·工控设备
?re?ta?rd?ed?3 小时前
C++11新特性,{}与左值
c++·windows
j7~4 小时前
【穷举、深搜与回溯算法】一棵决策树讲透全排列与子集
数据结构·c++·算法·leetcode·回溯·递归
kiracrimson5 小时前
栈与队列容器:适配器、deque 与 priority_queue
开发语言·c++·适配器模式
Linux运维技术栈6 小时前
WAF部署在防火墙后面,获取不到真实IP怎么办?
服务器·网络·tcp/ip·安全·防火墙·waf
qq_466302456 小时前
如何通过部分文件名,读取出整个文件名
c++·qt
octopus_c6 小时前
C++ 入门
开发语言·c++·算法