C++ 关键字四种cast类型转换

发布时间 2023-06-20 09:05:49作者: imxiangzi

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