强制类型转换

如何将信息转换为字节流
reinterpret_c

将一种类型的地址转为另一种类型的地址
将地址转换为数值,比如转换为整数

语法:reinterpret_cast<dataType>(adress)

  1. adress是待转换的数据的起始地址
  2. dataType是要转至的目标类型
  3. 对于二进制I/O来说,dataType是char*

e.g:

long int x{0};
int a[3] {21,42,63};
std::string str{"Hello"};
char* p1 = reinterpret_cast<char*>(&X);		//variable adress
char* p2 = reinterpret_cast<char*>(a);		//array adress
char* p3 = reinterpret_cast<char*>(&str);	//object adress

const_cast

将常量指针或引用转化为非常量的指针或引用,仍然指向原来的对象

语法:const_cast<dataType>(expression)
e.g.1:

int arr[3] {1, 2, 3};
const int* p = arr;
p[1] = 0;		//error
int* pa = const_cast<int*>(p);
pa[0] = 6;		//OK

static_cast

作用和C风格字强制类型转换相似,运行时不会检查安全性
在类的指针转换时,上转是安全的,下转没有动态类型检查,不安全
隐式转换是使用的static_cast

语法:static_cast<dataType>(expression)
e.g.

double a = 2.3;
int b = static_cast<int>(a);

dynamic_cast

将操作数expression转换为dataType类型的对象,其中,dataType必须是类的指针、引用或是void*类型

语法:dynamic_cast<dataType>(expression)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值