Skip to content

Latest commit

 

History

History
299 lines (181 loc) · 9.79 KB

README.md

File metadata and controls

299 lines (181 loc) · 9.79 KB

语言特性

关键字

模板

模板函数和模板特化

STL

traits

两级空间配置器

容器(containers)

序列容器:

函数对象:[less & hash](STL/容器containers/less & hash.md)

hashtable的实现

C 数组的替代品:array

容器适配器(adapter)

为什么大部分容器都提供了 begin、end 等方法?

答:容器提供了 begin 和 end 方法,就意味着是可以迭代(遍历)的。大部分容器都可以从头到尾遍历,因而也就需要提供这两个方法。

为什么容器没有继承一个公用的基类?

答:C++ 不是面向对象的语言,尤其在标准容器的设计上主要使用值语义,使用公共基类完全没有用处。

STL源码剖析

vector实现

slist的实现

list的实现

deque的实现

stack和queue实现

heap实现

priority_queue的实现

set的实现

map的实现

迭代器

iterator

C++11、14、17(某个点可能串起来)

关键字:

  1. auto
  2. decltype
  3. auto和decltype对比
  4. override & final:都不是关键字,放这里仅仅是方便
  5. [default & delete](C++11/关键字/default & delete.md)
  6. explicit
  7. using

常用技巧:

  1. 委托构造
  2. 成员初始化列表
  3. 类型别名
  4. [for each循环](C++11/常用技巧/for each循环.md)
  5. 可调用对象
  6. lambda
  7. 类模板的模板参数推导
  8. 结构化绑定
  9. 列表初始化
  10. 统一初始化
  11. 类数据成员的默认初始化
  12. 静态断言
  13. 类型转换
  14. 可变参数模板
  15. 智能指针

语言对比

  1. 结构体、联合体(以及匿名)
  2. bool类型
  3. memcpy
  4. strcpy
  5. strlen
  6. 类型安全

Java和C++

  1. Java和C++

Python和C++

  1. Python和C++

指针和引用

指针

  1. 指针和数组
  2. 野指针和悬空指针
  3. 函数指针
  4. nullptr
  5. 对象指针
  6. this指针
  7. 指针和引用

右值

  1. 右值和移动究竟解决了什么问题
  2. 右值和左值
  3. 右值引用
  4. 转移语意
  5. 完美转发
  6. move实现原理
  1. 异常:用还是不用,这是个问题

内存管理

编译链接

  1. 程序编译过程
  2. #include
  3. 动态链接与静态链接
  4. main前
  5. 模板的编译与链接
  6. 各个平台相关

内存对齐

  1. 结构体大小
  2. 类的大小
  3. 内存对齐原因

运行时内存

  1. 内存泄露

  2. 内存溢出OOM

  3. 防止内存泄露

  4. 检测内存泄漏

  5. new和delete和malloc和free

  6. 虚拟地址空间

  7. 变量区别

类与对象

面向对象

  1. 什么是面向对象编程

  2. 重载、重写、隐藏

  3. 多态

  4. 多重继承

  5. 如何让类不能被继承

  6. 友元

  7. 返回类型协变

构造

  1. 对象构造过程
  2. 生成默认构造函数
  3. 拷贝构造函数
  4. 禁止类被实例化
  5. 禁止拷贝

析构

  1. 对象析构过程

内存管理

  1. 深拷贝和浅拷贝
  2. 只能在栈上或堆上生成对象
  3. 空类
  4. 简单对象