三、类型转换
3.1 四种类型强制转换
- dynamic_cast:该转换符用于将一个指向派生类的基类指针或引用转换为派生类的指针或引用。
- const_cast:最常用的用途就是删除const属性。
- static_cast:static_cast本质上是传统c语言强制转换的替代品,比C类型转换更严格, 该操作符用于非多态类型的转换,任何标准转换都可以使用他,即static_cast可以把int转换为double,但不能把两个不相关的类对象进行转换,比如类A不能转换为一个不相关的类B类型。static_cast在类对象和基础类型转换中,会调用类的构造函数,和类型转换运算符比如operator int(),来进行显示转换。
- reinterpret_cast:该操作符用于将一种类型转换为另一种不同的类型,比如可以把一个整型转换为一个指针,或把一个指针转换为一个整型,因此使用该操作符的危险性较高,一般不应使用该操作符。
四、指针
4.1 指针与引用的区别
- 指针是一个变量,引用只是别名
- 指针需要解引用才能访问对象,引用不需要
- 引用在定义时必须初始化,且以后不可转移引用的对象,指针可以
- 引用没有const,即int& const a ;没有;而指针有const指针,即int* const ptr;
- 引用不可以为空;而指针可以
- 指针变量需要分配栈空间;而引用不需要,仅仅是个别名
- sizeof(引用)得到对应对象的大小;sizeof(指针)得到指针大小
- 指针加法和引用加法不一样
- 引用不需要释放内存空间,在编译时就会优化掉
4.2 指针与数组名的区别
- 数组名不是指针,对数组名取地址,得到整个数组的地址
- 数组名 + 1会跳过整个数组的大小,指针+1只会跳过一个元素的大小
- 数组名作为函数参数传递时,退化为指针
- sizeof(数组名)返回整个数组的大小,sizeof(指针)返回指针大小
- 数组名无法修改值,是常量
- int (*p)[] = &arr; 才是正确的数组指针写法
4.3 野指针、空指针的概念
- 野指针是指指向无效内存的指针,不能对野指针取内容,delete
- 空指针是指置为0\NULL\nullptr的指针,可以对空指针delete多次