- 引用是变量的一个地址别名,必须要初始化,不可以修改指向地址
- 指针就是一个地址,可以修改指向
左值引用和右值引用
- 左值引用,左值是非临时的,并且左值是可修改,可取地址
- 右值引用,右值是临时的
左值引用、右值引用
根据名字大概就可以猜到意思,左值引用就是对左值进行引用的类型,右值引用就是对右值进行引用的类型,他们都是引用,都是对象的一个别名,并不拥有所绑定对象的堆存,所以都必须立即初始化。
1 | type &name = exp; // 左值引用 |
左值引用
看代码:
1 | int a = 5; |
可以得出结论:对于左值引用,等号右边的值必须可以取地址,如果不能取地址,则会编译失败,或者可以使用const引用形式,但这样就只能通过引用来读取输出,不能修改数组,因为是常量引用。
右值引用
如果使用右值引用,那表达式等号右边的值需要时右值,可以使用std::move函数强制把左值转换为右值。
1 | int a = 4; |
类(内存模型)
- 析构函数需要加virtual,这样才能调用基类和子类的析构
- 向上转型中的重载方法,基类中的方法加virtual,这样调用方法时才能调用到子类的方法,否则只能调用到基类的方法
- 构造函数顺序:基类,派生类,如果基类有多个,按照派生类表中的基类顺序调用;析构函数则相反
友元函数和类
explicit 构造函数 - 避免隐式转换