人邮C语言系列丛书:你必须知道的CC++(套装全8册)(etc.)

书: https://pan.baidu.com/s/1A6ZLSPMbCiZ-L4eRucUvXQ?pwd=kt7i
一些笔记分享给大家:

一、C语言核心

  1. “C语言的指针本质是内存地址的容器,int *p*表示解引用,&取地址,二者互为逆操作。”
  2. “数组名在多数情况下退化为指针,但sizeof(arr)&arr是例外,仍保留数组类型信息。”

二、C++面向对象

  1. “C++的RAII(资源获取即初始化)原则:构造函数分配资源,析构函数释放,避免内存泄漏。”
  2. “虚函数表(vtable)是多态的核心实现,动态绑定通过运行时查表调用正确覆写方法。”

三、内存管理

  1. malloc/freenew/delete关键区别:后者调用构造/析构函数,前者仅分配原始内存。”
  2. “内存对齐(Alignment)原则:struct成员按最大类型大小对齐,#pragma pack(n)可强制修改对齐值。”

四、模板与泛型

  1. “模板特化(Template Specialization)允许为特定类型定制实现,优先级高于通用模板。”
  2. “SFINAE(替换失败非错误)是模板元编程的基础,利用decltypeenable_if控制重载决议。”

五、多线程与并发

  1. std::atomic保证操作的原子性,但多原子操作组合仍需锁(如std::mutex)实现线程安全。”
  2. “条件变量(std::condition_variable)的wait必须搭配谓词检查,避免虚假唤醒(Spurious Wakeup)。”

六、性能优化

  1. “内联函数(inline)通过消除调用开销提升性能,但过度使用会导致代码膨胀(Code Bloat)。”
  2. “缓存友好性(Cache Locality)比减少指令数更重要:连续内存访问(如数组)比随机访问(如链表)快10倍以上。”

七、标准库精髓

  1. std::vector的扩容策略(通常2倍增长)导致迭代器失效,reserve()预分配可避免多次复制。”
  2. “智能指针(std::shared_ptr)的循环引用问题需用std::weak_ptr打破,否则内存无法释放。”

八、现代C++特性

  1. “移动语义(Move Semantics)通过右值引用(&&)避免深拷贝,std::move将左值转为右值。”
  2. “Lambda表达式本质是匿名函数对象,捕获列表([=]/[&])决定外部变量的访问方式。”

九、调试与安全

  1. “未定义行为(UB)如野指针访问、整数溢出,编译器无义务报错,但可能导致灾难性后果。”
  2. “ASan(AddressSanitizer)工具可检测内存越界、use-after-free,代价是2倍运行速度下降。”

十、设计哲学

  1. “C++的零开销抽象(Zero-overhead Abstraction):不用的特性不产生额外成本,但滥用模板会违背此原则。”
  2. “C适合底层硬件操作,C++适合复杂系统建模——选择语言取决于问题域,而非性能偏见。”

发表评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注