当前位置: 首页 > news >正文

C++复习

📚 C++核心知识点超详细整理

🔤 基础语法与数据类型
变量与常量
  • 变量作用域与存储类别
    • 局部变量:定义在函数或代码块内,作用域仅限当前代码块,存储在栈区,离开作用域自动销毁。
    • 静态局部变量:用static修饰,存储在全局/静态区,初始化一次,生命周期持续整个程序,但作用域仍为当前代码块。
    • 全局变量:定义在所有函数外,作用域为整个程序,存储在全局/静态区,生命周期持续整个程序。
    • 静态全局变量:用static修饰,作用域仅限当前文件,避免不同文件的全局变量冲突。
  • 常量定义方式对比
    定义方式类型安全作用阶段适用场景
    const常量编译阶段需要类型检查的常量
    #define预处理阶段简单数值常量、代码片段替换
    enum枚举编译阶段相关常量集合
数据类型与类型转换
  • 基本数据类型内存大小(64位系统):
    类型大小(字节)范围
    bool1true/false
    char1-128~127
    short2-32768~32767
    int4-2^31~2^31-1
    long8-2^63~2^63-1
    float46~7位有效数字
    double815~16位有效数字
  • 类型转换规则
    • 隐式类型转换:低精度类型自动转换为高精度类型,如int转换为double
    • 显式类型转换:通过static_castconst_cast等进行强制转换,C风格转换(如(int)3.14)不推荐,因为缺乏类型检查。
🔀 控制流程深度解析
分支结构
  • 三目运算符细节
    • 语法:condition ? expr1 : expr2,右结合性,优先级低于算术和关系运算符,建议加括号明确逻辑。
    • 适用场景:仅适合简单二选一的场景,复杂逻辑建议使用if-else
  • if-else核心坑点
    • else默认与最近的未配对if结合,建议用大括号明确逻辑范围,避免匹配错误。
    • 非零即真规则:C++中任何非零值都被视为真,零值被视为假,布尔值true等价于1,false等价于0。
  • switch语句高级用法
    • 表达式类型限制:只能是整型、字符型、布尔型或枚举类型,不能是浮点数或字符串。
    • 贯穿问题:case块末尾必须加break,否则会从匹配的case开始执行后续所有代码。
    • 多值同逻辑:多个case可以共用一段代码,如case 1: case 2: cout << "工作日"; break;
循环结构
  • 三种循环对比
    循环类型适用场景注意事项
    for已知循环次数循环变量前置定义,减少重复创建
    while未知循环次数,可能不执行避免循环内重复计算条件表达式
    do-while未知循环次数,至少执行一次注意循环条件后面的分号
  • 循环控制进阶
    • break:跳出当前循环,若嵌套循环则只跳出最内层。
    • continue:跳过本次循环剩余代码,直接进入下一次循环迭代。
    • goto:可以跳出多层循环,但滥用会导致代码可读性下降,建议谨慎使用,可优先考虑设置标志变量。
📦 函数与面向对象进阶
函数核心特性
  • 函数重载匹配规则
    • 精确匹配优先,其次是常量转换、提升转换、标准转换。
    • 返回值类型不影响重载匹配,只有参数的类型、个数、顺序不同才会构成重载。
  • 递归函数优化
    • 尾递归:递归调用是函数的最后操作,部分编译器会将其优化为循环,避免栈溢出。
    • 终止条件:必须明确,否则会导致无限递归和栈溢出。
  • 内联函数
    • inline关键字修饰,建议函数体短小且调用频繁的函数使用,减少函数调用开销。
    • inline是编译器的建议而非强制,编译器可能拒绝内联较大的函数。
面向对象核心概念
  • 类与对象
    • 类是对数据和操作数据的方法的封装,相当于自定义类型;对象是类的实例,占用实际内存。
    • 成员变量:描述对象的属性,建议设为privateprotected,隐藏实现细节。
    • 成员函数:描述对象的行为,设为public作为对外接口,内部辅助函数设为private
  • 构造与析构函数
    • 构造函数:无返回值,与类同名,支持重载,用于初始化对象。默认构造函数在无自定义构造时自动生成。
    • 析构函数:无参数,与类同名加~,仅一个,用于清理对象资源。
    • 特殊构造:拷贝构造函数(const T&)用于对象拷贝,移动构造函数(T&&)用于转移临时对象资源,避免深拷贝。
  • 继承与多态
    • 继承方式:public继承保留基类成员的访问权限,protected继承将基类public成员变为protectedprivate继承将基类所有成员变为private
    • 多态:通过虚函数实现,基类指针或引用指向派生类对象时,调用派生类重写的虚函数。
    • 抽象类:包含纯虚函数(virtual void func() = 0),不能实例化,用于定义接口。
🗄️ STL容器与算法详解
常用容器特性
容器底层实现访问方式插入删除效率迭代器稳定性适用场景
vector动态数组随机访问尾部O(1),中间O(n)插入/删除导致迭代器失效频繁随机访问,尾部增删
list双向链表顺序访问任意位置O(1)迭代器稳定频繁插入删除操作
deque分段数组随机访问首尾O(1),中间O(n)插入/删除导致迭代器失效首尾频繁增删的队列
map红黑树键访问O(logn)迭代器稳定有序键值对存储,高效查找
unordered_map哈希表键访问O(1)平均插入可能导致迭代器失效无序键值对存储,快速查找
容器使用技巧
  • vector:提前用reserve预留内存,避免频繁扩容;批量删除元素用erase结合remove,减少元素移动次数。
  • stringfind方法查找子串,返回string::npos表示未找到;replace方法替换子串,可指定替换起始位置和长度;substr方法获取子串,参数为起始位置和长度。
  • map:用[]运算符访问键值对,若键不存在则插入默认值;用find方法查找键,返回迭代器,未找到则返回map::end()
🧠 内存管理与智能指针
内存分区与动态内存
  • 内存分区
    • 栈区:存储局部变量和函数参数,自动分配和释放,内存空间有限。
    • 堆区:动态分配内存(new/malloc),需手动释放(delete/free),否则会导致内存泄漏。
    • 全局/静态区:存储全局变量、静态变量和字符串常量,生命周期持续整个程序。
    • 代码段:存储函数体和类成员函数的机器指令,只读。
  • new/delete与malloc/free对比
    特性new/deletemalloc/free
    类型检查
    自动调用构造/析构
    返回值类型对应类型指针void*
    异常机制抛出bad_alloc异常返回NULL
智能指针详解
  • unique_ptr:独占所有权,同一时间只能有一个unique_ptr指向同一个对象,通过std::move转移所有权,不能直接拷贝。
  • shared_ptr:共享所有权,使用引用计数跟踪对象,当引用计数为0时自动释放内存,可通过use_count方法查看当前引用计数。
  • weak_ptr:解决shared_ptr的循环引用问题,不增加引用计数,可通过lock方法获取shared_ptr访问对象。
🚀 现代C++特性(C++11及以后)
列表初始化与auto
  • 列表初始化:统一的初始化语法,用{}进行初始化,避免窄化转换(如将浮点数转换为整数),语法更简洁。
  • auto类型推导:编译器自动推导变量类型,简化代码,尤其适用于复杂类型(如迭代器、Lambda表达式),但要注意auto不会推导引用和const属性,除非明确指定。
Lambda表达式与线程
  • Lambda表达式:定义匿名函数的语法,格式为[捕获列表](参数列表) -> 返回类型 { 函数体 }
    • 捕获方式:[]无捕获,[=]值捕获所有外部变量,[&]引用捕获所有外部变量,[x, &y]值捕获x,引用捕获y。
    • 适用场景:用于算法的自定义比较函数、异步任务的回调函数等。
  • 线程操作
    • std::thread创建线程,join方法等待线程执行完毕,detach方法让线程在后台执行。
    • std::mutex实现互斥锁,保护共享资源,避免数据竞争;std::lock_guard自动管理锁的生命周期,防止死锁。
http://www.zskr.cn/news/1424984.html

相关文章:

  • Lua 函数详解
  • 别再踩坑了!用Arduino IDE 2 + ST-Link给STM32烧录程序的保姆级避坑指南
  • PHP技术周刊 2026年第18周
  • 电力系统隐蔽通信漏洞与SCAMPER框架解析
  • 鸿蒙新闻阅读App工程源码:HarmonyOS 4兼容,含列表/详情页与网络请求封装
  • C#写的充电桩TCP调试小工具,带完整界面和通信封装
  • 西门子博途TIA Portal入门:手把手教你用常开常闭触点控制一个灯(附仿真避坑指南)
  • 告别DLL!Unity跨平台开发中C#与C++交互的另一种思路:源码集成全攻略
  • 从谐波失真(THD)计算到频谱显示:用LabVIEW快速搭建一个信号分析与可视化平台
  • 基于springboot躲猫猫书店管理系统
  • Windows多屏办公的隐形痛点:除了鼠标漂移,你的显示器‘物理对齐’真的做对了吗?
  • 如何通过开源工具Applera1n安全绕过iOS激活锁限制
  • 不止于点灯:用PWM波驱动舵机与呼吸灯,玩转蓝桥杯STM32G431
  • 别再手动K帧了!用Python脚本批量处理Blender骨骼动画(附完整代码)
  • 2026办公母婴氢水定制设备推荐榜:全能冰泉机/厨下反渗透净水机/中央净水机/厨下净热一体机/大流量净水机/厨下净水/选择指南 - 优质品牌商家
  • 电信老用户换套餐推荐工具:基于SVM的消费行为分类模型,含训练代码、测试数据与可视化分析
  • 别再复制粘贴了!手把手教你配置Categraf v0.3.22推送数据到Prometheus 2.45(附关键参数详解)
  • XC866芯片JTAG调试中断寄存器组冲突解决方案
  • 2026年5月西安防水堵漏品牌综合实力深度解析与优选指南 - 2026年企业资讯
  • 拼多多、Temu风控参数逆向踩坑实录:从anti_content生成到环境补全
  • 三菱FX3U PLC串口通讯实战:从RS/RS2指令到Modbus RTU,手把手调试绝对值编码器
  • 2026免费在线去背景工具推荐,保姆级教程手把手教你一键抠图换底色
  • SuperMap Hi-Fi 3D SDK + Unity实战:手把手教你打造一个可交互的智慧园区可视化Demo(含完整C#源码)
  • 2026年四川户外滑滑梯厂家评测:攀爬网游乐设备/无动力游乐设备/木质滑滑梯/水上游乐设备/核心维度对比解析 - 优质品牌商家
  • 大数高精度乘法详解
  • 终极Windows热键侦探:一键揪出占用你快捷键的“元凶“
  • 洞察2026年Q2吉林钢结构安装生产:技术演进与可靠伙伴选择 - 2026年企业资讯
  • Claude Opus 4.8 实测:更精确、更诚实,但创作还是不如 4.6
  • 保姆级教程:在Unity 2022 LTS中一步步导入自定义URDF模型并实现键盘控制
  • 2026台州专业包包回收机构评测:台州黄金保管、台州黄金回收、台州黄金抵押、台州专业名表回收、台州包包回收、台州台州奢侈品回收选择指南 - 优质品牌商家