一、语法
1、C++11的新特性
统一的列表初始化:可以使用{}来初始化所有类型的变量
智能指针
nullptr:专门用来区分空指针、0
类型推导:auto
基于范围的for循环:for(auto c:str)
2、存储
负数:负数在计算机中使用正数的补码存储,如-1是使用1的补码存储。
ASCII码表:是一种广泛使用的字符编码标准,用于表示文本中的字符。定义了128个字符,每个字符对应一个7位的二进制数(0到127)。
3、变量
变量类型 | 作用域 | 生命周期 | 线程之间 | 特点 |
---|---|---|---|---|
全局变量 | 全局,所有源文件均可见 | 与进程一致 | 不同线程共用 | |
静态全局变量 | 文件,当前文件可见 | 与进程一致 | 不同线程共用 | |
局部变量 | 局部,以 {} 为作用域 | 只在函数执行期间存在 | 独立 | 函数运行结束自动销毁 |
静态局部变量 | 局部,仅函数内可见 | 与进程一致 | 独立 | 只能被初始化一次 |
字节对齐(内存对齐)
#progma pack(x) 指定结构体以 x 为单位进行对齐。
智能指针
析构函数自动释放内存,无需free和delete操作
智能指针不支持加减操作。
浅拷贝和深拷贝
主要体现在类的复制构造函数和赋值操作上
当类中有指针变量,且指针变量指向一片数据时,默认复制构造函数采用的是浅拷贝,只会复制指针的值,而不会申请内存拷贝指针指向的数据;深拷贝需要重写默认复制构造函数
static
静态变量的存储位置在静态存储区
类型 | 特点 |
---|---|
静态成员变量 | 所有对象共享、类中声明类外定义并初始化、编译阶段分配内存 |
静态成员函数 | 所有对象共享同一个函数、静态成员函数只能访问静态成员变量 |
静态全局变量 | 从定义该变量的开始位置到文件结尾可见,别的文件不可见、未被初始化的静态全局变量会被自动初始化为0 |
静态局部变量 | 与局部变量的作用域一致 |
静态函数 | 作用域为当前源文件 |
多态
虚函数
函数重载
左值引用/右值引用/万能引用
左值:可以取址的变量
右值:临时变量、函数返回值、运算表达式、除string之外字面值常量
引用特点:不会重新分配内存,不会调用构造函数和析构函数
右值引用的作用:1、延长了右值的生命期,避免拷贝时多次调用构造函数以优化性能;2、可以实现完美转发(即参数再传递),提升了模板的功能。
万能引用:针对模板,T&&,可自动识别左值和右值。
拷贝构造函数
又名复制构造函数
场景:
对象作为函数参数,且以值传递的方式传入函数体时;
对象作为函数返回值,且以值传递的方式从函数中返回时;
对象给另一个对象进行初始化时。
二、STL
stl | 数据结构 | 特点 | 复杂度 | 其他 |
---|---|---|---|---|
vector | 动态数组 | 尾部插入O(1);随机插入O(N);查找O(N) | ||
map | 红黑树 | key唯一,有序,从begin()到end()升序 | 增删和查找:O(logN) | |
unordered_map | 哈希表 | key唯一,无序 | 插入和查找:平均O(1);最坏O(N) |