强制类型转换

1、隐式类型转换:系统会自动进行,无需介入

//会造成一定的精度损失
int a=3+34.9
double n=3+35.9

2、强制类型转换
2.1、c语言风格强制类型转换

int a=(int)2.3;//强制类型转换

//命名的强制类型转换通用形式

强制类型转换名<type>(express);
type:目标类型
express:要转换的对象

2.2、static_cast:静态转换
编译的时候会进行类型转换,这个静态类型转换和c强制类型转换差不多
可用于:
(1)相关类型转换

double f=90.0f;
int a=static_cast<int>(f);
(2)子类转换成父类
切记:父类不可以用static_cast转换成子类
	A a;
    B b;
    A a=static_cast<A>(b);

(3)void与其他任何类型的转换
但是不可用于其他基本类型之间的转换 如int
转换成double*…

int *p=&i;
void*q=ststic_cast<void*>(p);

2.3、dynamic_cast
运行时类别识别和检查,主要用于父类型和子类型对象之间的转换,可以将夫类型强制转换成子类型

2.4、const_cast
去除指针或者引用的const去除,能够将const性质转换掉。编译时进行类型转换

int a=10;
const int*p=&a;
int *a2=const_cast<int*>(p)

2.5、reinterpret_cast (比较危险的类型转换)
重新解释(可以在无关的类型之间进行转换)
常用于
整形转换成另一种指针按照转换的类型重新解释内存中的内容
从一个指针类型转换成一个整形

int i=10;
int*pi=&i;

void *pvoid=reinterpret_cast<void*>(pi);

int*pi2=reterpret_cast<int*>(pvoid);

总结:
所有强制类型转换都不建议使用,强制类型转换会抑制编译器报错。尽量少用,千万不要再用c风格的类型转换

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值