- 栈和队列的区别
- 栈:先进先出
- 队列:先进后出
- 预处理、编译、汇编、链接
- 预处理:去掉行号、include、去掉注释、条件编译
- 编译:将目标代码转换为汇编代码
- 汇编:将汇编代码转换为机器
- 链接:链接目标文件文件
- 构造函数
- 如果有已经初始化的参数,这个参数需要放置在参数列表的最后
- 数组如何实现随机访问
- 首地址+偏移量=p+sizeof(ele)*index
- 链表和数组的区别
- 一个是连续内存、另一个不是连续内存分配
- 插入
- 删除
- 查找
- nullptr和null
- c++ 中 null表示的是0,nullptr表示的是空指针
- ifndef && define
- 防止头文件被多次包含,使用条件编译
- include “” && include <>
- <> 会到标准库的头文件中去查找
- “ “会到当前目录下面去查找
- inline && 宏定义
- 建议编译器在编译期间对调用函数的地方进行替换,具有安全检查
- 宏则表示在预处理期间对文本替换,没有类型检查
- 消除函数调用以及返回带来的开销,占用更多的内存空间
- 如何让一个类不能被继承 -
- typedef && define
- define是在预处理阶段展开、typedef是关键字,在编译时处理,具有类型检查
- define 对作用域没有要求、typedef对作用域有要求
- typedef 定义别名,以及函数指针
- 为什么有一些类型不能用vector初始化
- 一个基类以及一个子类,基类指针指向子类对象,memset之后,调用delete base,导致找不到虚函数
- memset(base,0,sizeof(Derived));
- 一个基类以及一个子类,基类指针指向子类对象,memset之后,调用delete base,导致找不到虚函数
- static关键字
- static 全局变量、static局部变量、static函数、static类的成员、static成员函数
- 堆和栈的区别
- 栈地址空间是一种向低地址扩展的数据结构,是一块的连续的虚拟内存区域
- 栈地址空间是由操作系统管理,用来存储局部变量或者函数形参
- 栈空间的大小是固定的
- 堆空间是由程序员管理的,动态申请与释放
- 堆空间上的分配操作比栈上的分配操作慢
- 原子操作
- 存储到寄存器、对寄存器进行操作、写回寄存器
- new && delete
- new的底层分为三步
- 在堆上找到一块大小足够的内存,并返回起始地址
- 调用初始化函数对内存进行初始化
- 返回对应指针类型的指针
- delete的底层分为两步
- 调用对象的析构函数
- 回收内存…
- new的底层分为三步
