C++ 关键字四种cast类型转换
1.23 四种cast类型转换
作用:克服c中强制类型转化带来的风险,C++引入四种更加安全的强制类型转换运算符(明确转换的目 的,偏于程序的维护和分析)
const_cast:
// 1.去除const属性,将只读变为只读写
// 2.针对常量指针、常量引用和常量对象
const char *p;
char *p1 = const_cast<char*>(p);
2. static_cast
// 1.内置数据类型之间的转换,int转double,char转int
// 2.基类指针与派生类之间的转换,只能转换有继承或派生关系的类。用于类层次结构之间基类和派生类指针和引用之间的转换,进行向上转型是安全的,但是进行向下转型是不安全的,但是是可以转换的;向上转型:我们知道基类的引用和指针都可以指向派生类的对象,那么将派生类的指针或者引用强转为基类的指针或者引用,那么这就是向上转型,也就是向父类转;向下转型:向下转型就和向上转型相反,它是将父类的指针或者引用,强制转换为子类的指针或者引用
// 3.把void类型指针转换为目标类型的指针
// 4.任何类型的表达式转化为void类型
// 整形转浮点型
int a = 10;
double b = static_cast<double>a;
//基类指针转派生类
class A{}; class B : public A{};
A *pA = new A;
B *pB = static_cast<B*>(pA);
reinterpret_cast
可以将一个类型的指针转换为其它任意类型的指针,也可以用在指针和整形数据之间的转换它是很危险的,如果我们没有使用它的充分理由,那么就不要使用它
为运算对象的位模式提供较低层次上的重新解释
用于底层的强制转换,依赖于机器,一般使用较少
dynamic_cast
dynamic_cast是运行时处理的,运行时进行类型检查,其他三种是编译时处理的
不能用于内置数据类型之间的转换
dynamic_cast在进行上行转换时和static_cast效果是一样的,但是进行下行转换时会进行类型检查,比static_cast更加安全,下行转换是否成功取决于转换对象的实际类型与目标类型是否相同
要求基类必须具有虚函数,否则编译不通过
若转换成功,返回的是指向目标的指针或引用,不成功返回NULL
https://www.cnblogs.com/qiujunxian/p/16757291.html