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

posted @ 2022-10-06 11:32  蜡笔小新紫南  阅读(141)  评论(0编辑  收藏  举报