C++常见类型转换

C++中最基本的转换是数值类型之间的转换,转换方式也很简单:

类型 变量 = (类型) 变量

例如:

int a = 100;
char b = (char)a;

当然除了基础的强制转换还有以下四种转换:
(1)static_cast:转换方式如下:

类型 变量 = static_cast<类型>(变量1)

而static_cast能转换的类型如下:
①基础类型转换:

int a = 100;
char b = static_cast<char>(a);

②转换具有继承关系的指针(子父类可相互转换):

class animal{};
class Cat:public animal{};
animal *ani = NULL;//这里只是方便观察代码是否正确,所以设置为空
Cat * cat = static_cast<Cat*>(ani);//父类转换为子类

③转换具有继承关系的引用(子父类可相互转换):

animal objl;
animal &obj1 = obj;
Cat &cat = static_cast<Cat&>(obj1);

这里需要注意的是static_cast不能进行基础数据类型指针和对象类型指针的转换。
(2)dynamic_cast:转换方式如下:

类型 变量 = dynamic_cast<类型>(变量1)

dynamic_cast只能转换具有继承关系的,在转换前会进行对象类安全检查,所以只能进行子类向父类的转换:

Cat *cat = NULL;
animal *ani = dynamic_cast<animal*>(cat);

(3)const_cast;可以进行指针、引用、对象指针之间的转换:转换方式如下:

类型 变量 =const_cast<类型>(变量1)

①引用:

	int a = 10;
	const int& b = a;
	int& c = const_cast<int&>(b);

②指针:

	//指针
	const int* p = NULL;
	int* p1 = const_cast<int*>(p);

	int* p3 = NULL;
	const int* p4 = const_cast<int*>(p3);

(4)reinterpret_cast:强制类型转换:任何类型的指针都可以转为其他指针:转换方式如下:

类型 变量 = reinterpret_cast<类型>(变量1)

这里举一个函数指针的例子:

typedef void(*FUNC)(int, int);
typedef int(*FUNC1)(int, char*);
//函数指针
FUNC func1;
FUNC1 func2 = reinterpret_cast<FUNC1>(func1);
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值