C++类型转换
C++转换的对象可分为:
1;基础数据类型
2; 指针类型
3; 类对象
- const_cast
-
指针 引用 或者对象指针
-
增加或去除变量的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
不具备移植性,常见用途是转化函数指针类型
- 使用应该知道要转换的变量,转换前是什么类型,转换后是什么类型,以及转换后可能会产生什么后果
- 一般情况下,不建议使用类型转化,避免进行类型转换