C++类型转换

旧式类型转换

C/C++通用类型转换:

(int)0.1;

char a;
(float) a;

(type)value,(type)expression为旧式类型转换的基本形式。

新型类型转换

注意,一下介绍的都是运算符,非函数api。

static_cast< type > ( epression )

class father
{};
class son
{};
int main()
{
	father *p = new son;
	static_cast<son *> p;

	return 0;
}

注意,仅仅在原类型与转换类型之间可以隐式转换的时候可以使用,例如int 和 float之间是不能用static_cast进行转换,这可以保证指针类型转换的安全性。注意,在继承机制中将基类指针转化为派生类指针也是危险的。 此时推荐使用dynamic_cast进行下行转换。

const_cast< type > ( expression )
用于去掉指针的const和volatile属性,用于相同类型指针转换。

int *p1;
int *p2 = const_cast<int *>(p1);

dynamic_cast< type > ( expression )
该运算符用于expression与type存在继承关系或者相同的情形,简单地说,要求v和e之间是基类,子类或者该类本身。注意,如果t为子类,e为子类,则父类必须含有虚函数(多态)。

father *p;
dynamic_cast<son *>(p); //仅当father有虚函数(多态)时,编译才会通过。

reinterpret_cast< type > ( expression )
天生就用于情况复杂的类型转换,通过不同的指针类型重新读取内存。但有几个注意事项:

  1. 针对不同内存规则,如32位和64位,大端小端,代码的可移植性很差。
  2. 对内存的理解一定要到位
  3. 函数与数据类型指针不能互相转换。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值