C++类型转换

C++提供了四种类型的转换:静态转换(static_cast)用于基类和派生类指针或引用,以及基本类型间的转换;动态转换(dynamic_cast)在类层次间进行安全的上下行转换;常量转换(const_cast)处理const对象;重新解释转换(reinterpret_cast)执行不安全的数据类型重解释。这些转换让C++具备了更灵活的类型操作能力。
摘要由CSDN通过智能技术生成

C++转换类型的方法?

一般学校只学了强制类型转换(强转)const,但其实C++不止可以将基本数据类型转换,有父类和子类的转换,甚至还有整型转换为指针。所以,别再说C++只有强转了。

C++有四种常见的转换方式(静态转换,动态转换,常量转换,重新解释转换)

1.静态转换

①用于类层次结构中基类(父类)和派生类(子类)之间的指针或引用的转换。

②用于基本数据类型之间的转换,如int转换为char,char转换为int。但安全性需要开发者保证。

static_cast<要转到的类型>(将谁转换)

//1.基础类型转换
char a = 'a';
//static_cast<要转到的类型>(将谁转换)
//char->double
double d = static_cast<double>(a);
//2.有层次类的指针或引用转换
Father *f = NULL;
Son *s = NULL;

//向下转(不安全)
Son* S1 = static_cast<Son*>(f);
//向上转(安全)
Father* F1 = static_cast<Father*>(s);

//没有继承关系的类之间的指针不能转换
//Other *o = static_cast<Other*>(s);
//3.引用转换
Father f;
Son s;

Father &ref_f = f;
Son &ref_s = s;

//向上转(安全)
static_cast<Father&>(ref_s);
//向下转(不安全)
static_cast<Son&>(ref_f);

2.动态转换

①用于类层次结构间的上行转换和下行转换。

②基础类型不能使用动态转换。

③在类层次间进行上行转换时,dynamic_cast(动态转换)和static_cast的效果一样。

④在进行下行转换时,dynamic_cast具有类型检查功能,比static_cast更安全。

dynamic_cast<要转到的类型>(将谁转换)

Father *f = NULL;
Son *s = NULL;

//向上(安全)
Son *f1 = dynamic_cast<Father*>(s);
//向下(不安全,会检查)
Son *s1 = dynamic_cast<Son*>(f);

3.常量转换

①常量指针被转换为非常量指针,并且仍指向原来的对象;

②常量引用被转换为非常量引用,并且仍指向原来的对象;

const_cast<要转到的类型>(将谁转换)

const int *p = NULL;
//const->不带const
int *newP = const_cast<int*>(p);

//不带const->const
int *pp = NULL;
const int *newPP = const_cast<const int*>(pp);

4.重新解释转换

①将一种数据类型从一种类型转换为另一种类型,例如可以将一个指针转换成一个整数,也可以将一个整数转换成一个指针。(这种转换机制非常不安全)

reinterpret_cast<要转到的类型>(将谁转换)

//整型->指针
int a = 10;
int *p = reinterpret_cast<int *>(a);

//a类->b类
Father *f = NULL;
Other *o = reinterpret_cast<Other *>(f);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值