【C++数据类型】C++中的类型转换(一)

我们知道C++是一种强类型的语言,在任何变量在使用之前,必须先要进行声明。C++也支持类型之间的转换,而且在保证类型安全的情况下还可以做一些隐式的类型转换,如int类型变量可以直接隐式转换成char型:

int i=0;
char c=i;

除了隐式类型转换之外,C++还支持强制类型转换,共有6种转换形式:

1、沿用C语言中的:
type2 var2=(type2)var1
2、C++本身自带的:
type2 var2=type2(var1)
3、静态类型转换:
type2 var2=static_cast<type2> var1
4、常类型转换:
type2 var2=const_cast<type2> var1
5、动态类型转换:
type2 var2=dynamic_cast<type2> var1
6、重解释类型转换:
type2 var2=reinterpret_cast<type2> var2

后面,我将陆续介绍C++中各类强制类型转换中的使用方法和使用场景,同时也作为对C++语法的一个复习。

一、C风格和C++风格的强制类型转换。
首先对于1、2形式的转换类型,由于语法和使用场景比较简单,这里不再赘述,下面先介绍下C++中的静态类型转换static_cast<>。

二、静态类型转换static_cast<>
static_cast的转换使用场景其实和1、2方式较为类似,主要用在基本类型之间的转换和基类以及子类对象的指针(和引用)之间的转换。但是和前两种转换方式区别的地方是:在进行转换时它会先从相反的方向进行检查,如果相反的方向可以支持类型转换,那么它才会进行转换。什么意思呢?

先看下面的例子:

#include<iostream>   
   using namespace std;
   int main()
   {   
   int* pi=NULL;   
   void* pv=pi; 
   int* pi1 = static_cast<int>(pv);
   cout<<(void*)pv<<endl;   
   return 0;
   }

我们知道,任何类型的指针都可以隐式转换成void*,而反过来void*类型的指针转换成其他指针时就无法使用隐式类型转换,此时我们就需要使用static_cast静态类型转换。以上面的代码为例,在执行int* pi1 = static_cast<int>(pv);语句时,C++编译器会检查int*是否能转换成void*,如果可以转换它才会进行现在的转换。
其实,在一般情况下static_cast在使用时完全等同于1、2两种转换方式,只不过增加了对转换类型的反向检查。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值