C++4种类型转换区分

(1)static_cast<>()

转换语句格式:static_cast<转换后的类型>(表达式)

用于转换基本类型和具有继承关系的类成员之间转换,static_cast不太用于指针类型之间的转换,它的效率没有reinterpret_cast的效率高。

而对于基本类型的转换是完全不行的。double aa = 1.0; int *p = static_cast(&aa);

//像这样: double aa = 1.0; int *p = static_cast(&aa);是不允许的。

C++4种类型转换区分_第1张图片

(2)const_cast<>()

用法:const_cast(exdivssion)

用于从一个指向常量的指针,得到一个普通的指针。比如从一个const T*,得到一个T*。

该运算符用来修改类型的const或volatile属性。

用于去除指针变量的常属性,将它转换为一个对应指针类型的普通变量;反过来也可以将一个非常量指针转换为一个常量指针变量,它无法将一个非指针的常量转换为普通常量

C++4种类型转换区分_第2张图片

(3)dynamic_cast<>()

用于某个类层次结构中指向不同对象的指针之间的转换,最常见的用法是由一个"基类指针"得到一个"派生类指针"。这里的"dynamic"意味着转换的正确性依赖于"运行时刻"的检查。Dynamic_cast<>()只能在继承类对象的指针之间或引用之间进行类型转换;这种转换并非在编译时,而是在运行时,动态的;没有继承关系,但被转换的类具有虚函数对象的指针进行转换

C++4种类型转换区分_第3张图片

(4)reinterpret_cast<>()

将一个类型指针转换为另一个类型指针,这种转换不修改变量值数据存放格式

只需在编译时重新解释指针的类型,它可以将指针转化为一个整型数但不能用于非指针的转换

C++4种类型转换区分_第4张图片

 

你可能感兴趣的:(C++)