#include <iostream>
using
namespace
std;
/*
*四种显示类型转换
**/
int
main(){
/* static_case 类型转换*/
double
a=1.1213;
int
b=
static_cast
<
int
>(a);
class
base{};
class
father:
public
base{};
father f;
base ba=
static_cast
<base>(f);
/*reinterpret_cast类型转换*/
//基本类型的指针类型转换
double
c=12.123;
double
* pc=&c;
int
* pi=
reinterpret_cast
<
int
*>(pc);
//不相关的类的指针的类型转换
class
A{};
class
B{};
A* pa=
new
A;
B* pb=
reinterpret_cast
<B*>(pa);
delete
pa;
//指针转换为整数
int
num=
reinterpret_cast
<
int
>(pc);
//企图转换非指针类型的
//b=reinterpret_cast<int>(a); 这条语句是错误的
//企图将const指针转换为void指针
// const int * pint=0;
// void* pvoid=reinterpret_cast<void *>(pint); 错误
/* const_cast 类型转换*/
const
int
* pint=0;
int
* pint1=
const_cast
<
int
*>(pint);
//基于安全性的考虑,下面的转换是错误的
// const int nInt=0;
// int nInt2=const_cast<int>(nInt);
int
* pnum=0;
const
int
* pnum2=
const_cast
<
const
int
*>(pnum);
int
i=0;
//const int i2=const_cast<const int>(i); //不能编译通过
const
int
i2=(
const
int
)i;
//隐式转换可以编译通过
return
0;
}
|
具体的总结请参考《C++ STL开发技术导引.pdf 》第1.6小节。