细说C++(九):类型转换详解(二)

C++类型转换

C++转换的对象可分为:
1;基础数据类型

2; 指针类型

3; 类对象

  • const_cast
    1. 指针 引用 或者对象指针

    2. 增加或去除变量的const性


void test(){
	int a=1;
	const int& b=a;
	int& c=const_cast<int&>(b);  
	c=2;	
}

const int*p =NULL;
int* p2=const_cast<int*> (p);

int* p3=NULL;
const int* p4=const_cast<const int*>(p3);
  • reinterpret_cast
    1;强制类型转换

(1) 指针类型转换
可以是无关的指针
(2) 函数指针


class no{
	//nothing
};

class change{
	//nothing
};

void test1(){
	//
	no* n1=NULL;
	change* ch=reinterpret_cast<change* >(n1);
} 
//
typedef void(*func1)(int,int);
typedef void(*func2)(int,char*);

void test2(){
	func1 pointer1;
	func2 pointer2=reinterpret_cast<func2>(pointer1);
}

对于类型转换;

dynamic_cast :
继承体系安全向下转型或跨系转型;找出某对象占用内存的起始点
static_cast:
同旧式C转型,如int 到double
const_cast:
常用于去除某个对象的常量性
reinterpret_cast
不具备移植性,常见用途是转化函数指针类型

  1. 使用应该知道要转换的变量,转换前是什么类型,转换后是什么类型,以及转换后可能会产生什么后果
  2. 一般情况下,不建议使用类型转化,避免进行类型转换
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值