C++ 是一种多范式编程语言,涵盖面向对象、泛型、过程式编程等特性。其核心概念如下:
1. 基础语法与程序结构
- 编译模型:头文件(.h)与源文件(.cpp)分离,预处理、编译、链接过程。
- 变量与类型系统:静态类型、const 常量、auto 类型推导、引用(&)与指针(*)的区别。
- 作用域与生命周期:局部/全局变量、static 关键字、extern 链接性。
- 控制结构:条件(if/switch)、循环(for/while)、跳转(break/return)。
2. 面向对象编程(OOP)
- 类与对象:成员变量、成员函数、访问控制(public/protected/private)。
- 构造函数与析构函数:初始化列表、默认/拷贝/移动构造函数、explicit 关键字。
- 继承:单继承、多重继承、虚继承、派生类与基类的关系。
- 多态与虚函数:虚函数表(vtable)、动态绑定、override 和 final 关键字。
- 抽象类与接口:纯虚函数(= 0)、抽象基类的设计。
3. 内存管理
- 手动内存管理:new/delete 与 malloc/free 的区别,内存泄漏风险。
- RAII(资源获取即初始化):通过对象生命周期管理资源(如文件句柄、内存)。
- 智能指针:std::unique_ptr(独占所有权)、std::shared_ptr(共享所有权)、std::weak_ptr(避免循环引用)。
4. 模板与泛型编程
- 函数模板:通用算法实现(如 template <typename T> T max(T a, T b))。
- 类模板:通用数据结构(如 std::vector<T>)。
- 模板特化与偏特化:针对特定类型的优化实现。
- 可变参数模板:支持任意数量和类型的参数(如 std::make_shared)。
- SFINAE(替换失败非错误):模板元编程基础,用于条件编译。
5. 标准模板库(STL)
- 容器:序列容器(vector, list)、关联容器(map, set)、无序容器(unordered_map)。
- 迭代器:泛型指针(begin(), end()),支持算法与容器的解耦。
- 算法:通用操作(sort, find, transform)通过迭代器操作容器。
- 函数对象与 Lambda:std::function、Lambda表达式([capture](args) { ... })。
6. 高级语言特性
- 移动语义与右值引用:std::move 转移资源所有权,避免深拷贝开销。
- 异常处理:try/catch/throw 机制,异常安全保证(基本、强、无异常保证)。
- 运算符重载:自定义类型支持运算符(如 +, <<)。
- 友元(Friend):允许非成员函数访问类私有成员。
- 类型转换:static_cast、dynamic_cast、const_cast、reinterpret_cast。
7. 现代 C++(C++11 及后续版本)
- Lambda 表达式:匿名函数,支持闭包(捕获外部变量)。
- 右值引用与移动语义:优化临时对象处理。
- 并发支持:std::thread、std::async、原子操作(std::atomic)。
- 自动类型推导:auto 和 decltype。
- 范围 for 循环:for (auto& item : container)。
- 概念(Concepts)(C++20):约束模板参数,增强泛型代码可读性。
8. 关键设计思想
- 零开销抽象:不牺牲性能的高层抽象(如 STL)。
- 值语义:对象默认按值传递,强调独立性(与引用语义对比)。
- 资源管理:通过 RAII 和智能指针避免资源泄漏。
- 编译时多态(模板)与 运行时多态(虚函数)的权衡。
9. 常见陷阱与最佳实践
- 悬空指针/引用:使用智能指针替代裸指针。
- 对象切片:传递派生类对象时避免按值传递基类。
- 异常安全:确保代码在异常时保持一致性。
- 规则三/五/零:正确处理拷贝构造、赋值运算符、析构函数(及移动语义)。
掌握这些核心概念后,可进一步深入模板元编程、并发模型、性能优化等高级主题。C++ 的复杂性要求开发者既要理解底层机制,又要熟悉现代编程范式。