c++——类型转换符

c++包含4个类型转换运算符:`dynamic_cast、const_cast、static_cast、reinterpret_cast`

一、dynamic_cast:dynamic_cast函数讲解

二、const_cast
const_cast运算符用于执行只有一种用途的类型转换,即改变值为const或volatile,const_cast<type-name> (expression)

class A
{
	...
};

class B
{
	...
};

B pb;
const B *pb1 = &pb;
B *pb2 = const_cast<B *>pb1;  //有效的
const A * pa = const_cast<A *>pb1; //无效的
【注】type-name>(expression)的类型必须相同

demon

#include<iostream>

using namespace std;

void change(const int *p,int n);

int main()
{
	int p1 = 6666;
	const int p2 = 1666;
	cout << "p1= "<< p1 << " | p2= " << p2 <<endl;
	change(&p1,666);
	change(&p2,666);
	cout << "p1= "<< p1 << " | p2= " << p2 <<endl;
	return 0;
}

void change(const int * p,int n)
{
	int *q;
	q = const_cast<int *>(p);
	*q -=n;
	cout << "q is "<< *q <<" | p is "<< *p << endl;
}

运行结果:
在这里插入图片描述

三、static_cast
static_cast运算符static_cast<type_name>(expression),只有type_name可以被隐式的转换为expression所属的类型或expression可被隐式转换为type_name类型时才是合法的。

class A
{
	...
};

class Bpublic A
{
	...
};

class C
{
	...
}
A pa;
B pb;

A *p_a = static_cast< A *>(pb); //合法
B *p_b = static_cast< B *>(pa); //合法
C *p_c = static_cast< C *>(pb); //不合法,B、C类型不可以隐式转换

四、reinterpretc_cast

reinterpretc_cast<type-name>(expression)

局限性: 1.不支持所以类型转换
2.不能将函数指针转换为数据指针
示例

#include<iostream>

using namespace std;

int main()
{
	struct dat {short a;short b;}'
	long value = 0xA224B118;
	dat * pd = reinterpret_cast< dat *> (&value);
	cout << hex << pd->a <<endl;
	return 0;
}
//摘录自c++Primer Plus

运行结果:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值