c++中的类型转换


c++相对于c来说新增了4中类型转换符:static_cast、dynamic_cast、reinterpret_cast、const_cast。

概念:

  • 上行转换:将子类的指针或引用转换成基类表示

  • 下行转换:将基类的指针或引用转换成子类表示

1.static_cast(属于强转)

  • 基本类型的转换

  • 类层次关系的转换,上行转换是安全的。下行转换没有动态类型检查不安全。

  • void类型转换成其他类型,不安全。

  • 任何类型的表达式转换成void类型

2.dynamic_cast(用于类指针类型的转换)

  • 使用的条件
    • 转换的类型之间存在着虚继承关系
    • 转化之后的类型需要与其指向的实际类型相符合。
  • 运行时进行类型检查,转换失败返回NULL。

3.reinterpret_cast(专门用于指针类型的转换)

  • 仅仅是重新解释类型,没有对二进制的数据进行转换。
# include <iostream>
# include <stdlib.h>
using namespace std;

int main()
{
	long c = 0xFFFFFFFF0000000F;
	int b = 0xF;
	int * a  = reinterpret_cast<int *>(&c);
	cout << *a << endl;
	cout << b << endl;
	cout << c << endl;
	return 0;
}

4.const_cast

  • 就是去除原有类型中的const特性。
# include <iostream>
# include <stdlib.h>
using namespace std;
void function(const char * p)
{
	char * p = const_cast<char *>p;
	p[0] = 'A';
}

int main()
{
	//char * str = "abcdefg";//这种会报错,因为只读区的数据不是不可以改变的。
	char str[] = "abcdefg";//这种情况数据存放到栈区。
	function(str);
	cout << str << endl;
	return 0;
}

参考:https://blog.csdn.net/tiandao2009/article/details/79842006?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值