C++的四种类型转换: static_cast const_cast reinterpret_cast dynamic_cast

本人之前一直使用C语言的类型强制转换,最近写C++代码比较多。在github上看到其他人的代码并没有使用C语言的类型转换,了解到C语言的类型转换在C++中是不安全的。

所以整理了一下C++的四种类型转换关键字的用法

目录

1.C语言风格的类型转换

2.staic_cast静态强制 

3.const_cast类型强制 

4、reinterpret_cast运算符 

5、dynamic_cast运算符 


1.C语言风格的类型转换

int main()

{

    int i=0x12345;

    char c='c';

    int* pi=&i;

    char* pc=&c;

}

2.staic_cast静态强制 

不能在无关的指针之间进行static类型强制 

class CAnimal 
{ 
//... 
public: 
CAnimal(){} 
}; 

class CGiraffe:public CAnimal 
{ 
//... 
public: 
CGiraffe(){} 
}; 

int main(void) 
{ 
CAnimal an; 
CGiraffe jean; 

an = static_cast<CAnimal>(jean);//将对象jean强制成CAnimal类型 
return 0; 
} 

3.const_cast类型强制 

const_cast类型强制将一个const变量变成一个非const的等价形式 


int main() 
{ 
const int j = 99; 
int * k; 

k = const_cast<int *>(&j);//解除const 
return 0; 
} 

4、reinterpret_cast运算符 

reinterpret_cast运算符用来将一个类型指针转变为另一种类型的指针,也用在将整开型量转为指针,或将指针转为整型量上; 
 

int main() 
{ 
int j = 10; 
int * ptr = &j; 
char * cptr; 

cptr = reinterpret_cast<char *>(ptr);//将int指针类型转变为char的指针类型 

return 0; 
} 

5、dynamic_cast运算符 

dynamic_cast的主要目的是: 

1)它返回派生类对象的地址; 
2)它测试基类指针是否指向下一尖括号<>中所指定类型的对象 

dynamic_cast是一个运行时类型信息,dynamic_cast运算符将指向派生对象的基类部分的基类指针转变为指向派生对象的派生类指针,dynamic_cast必须严格地指定与派生对象相同的类,或者它返回NULL指针; 

class CAnimal 
{ 
//... 
}; 
class CGiraffe:public CAnimal 
{ 
//... 
}; 
class CGoat:public CAnimal 
{ 
//... 
}; 

int main() 
{ 
CGiraffe gene; 
CAnimal * aptr = &gene; 
CGiraffe * ptr1,* ptr2; 

ptr1 = dynamic_cast<CGiraffe *>(aptr); 
ptr2 = dynamic_cast<CGoat *>(aptr); //return NULL 

return 0; 
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

q472599451

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值