强制类型转换

本文详细介绍了C++中的四种类型转换方法:static_cast、reinterpret_cast、const_cast和dynamic_cast,并通过示例说明了它们的区别及应用场景,特别是dynamic_cast在多态类型转换中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C语言强制类型转换

1.隐式类型转换
     eg:顺序表中在某个位置插入一个数
           size_t pos;
             for(int i=n-1; i>=pos; i--)
             {}
      注:i>=pos中,会发生隐式类型的转换,如果pos=0时,导致死循环。
       应该为:i>=(int)pos将pos强转为int-----强制类型转换
2.显示的强制类型转换
     eg:  i>=(int)pos   缺点:不规范       
 
C++强制类型转换
 
    1.static_cast   //相关类型的转换,相当于C语言的隐式转换 
        static_cast用于非多态类型的转换(静态转换),任意标准转换都可以用它,但它不能用于两个不相关类型转换
    2.reinterpret_cast  //不相关类型的转化,相当于C语言中的强制类型的转换

        reinterpret_cast 操作符用于将一种类型转换为另一种不同的类型

   
   3.const_cast   //删除数据的常性   
         const_cast最常用的用途就是删除变量的const属性,方便赋值
4.dynamic_cast  ----多态类型的转化 (前提:必须有继承关系)
      dynamic_cast用于将一个父类对象的指针转换为子类对象的指针或引用(动态转换)  
       向上转型:子类对象指针->父类指针/引用(不需要转换)(切片/切割)   
       向下转型:父类对象指针->子类指针/引用(用dynamic_cast转型是安全的)

典型例题:
        区分pa是指向父类还是子类
#include<iostream>
using namespace std;

class A
{
public:
	virtual void f()
	{}
};

class B:public A
{};

void fun(A* pa)
{
	//要求区分Pa是指向子类还是父类
	B* pb = dynamic_cast <B*> (pa);
	if(pb)
	{
		cout<<"pa指向子类"<<endl;
	}
	else
	{
		cout<<"pa指向父类"<<endl;
	}
}

注:1.dynamic_cast只能用于含有虚函数的类 

         2.dynamic_cast会先检查是否能转换成功,能转换成功则转换,不能则返回0  

总结:static_cast和reinterpret_cast运算要么直接被编译器拒绝进行转换,要么就一定会得到相应的目标类型的值。 而dynamic_cast却会进行判别,确定源指针所指的内容,是否真的合适被目标指针接受。如果是否定的,那么dynamic_cast则会返回null。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值