C++常用的数据类型强制转换方法
dynamic_cast < type-id > ( expression )
该运算符把expression转换成type-id类型的对象。Type-id必须是类的指针、类的引用或者void *;
dynamic_cast主要用于类层次间的上行转换和下行转换,还可以用于类之间的交叉转换
class B
{
public:
int m_iNum;
virtual void foo();
};
class D:public B
{
public:
char *m_szName[100];
};
void func(B *pb)
{
D *pd1 = static_cast<D *>(pb);
D *pd2 = dynamic_cast<D *>(pb);
}
在进行下行转换时,dynamic_cast具有类型检查的功能,比static_cast更安全
int main(int argc, char* argv[])
{
/*
static_cast 基本的数据类型转换
int i=5;
float g=34.4;
i=static_cast<int>(g);
cout<<i<<endl;
static_cast 不能用于指针转换
错误:'static_cast' : cannot convert from 'char *' to 'int *'
*/
/*
把空指针转换成目标类型的空指针
void * vp;
char * cp=static_cast<char *>(vp);
*/
/*
reinterpret_cast主要是将数据从一种指针类型的转换为另一种指针类型。
char *cp;
int * ip;
ip=reinterpret_cast<int *>(cp);
*/
/*
const_cast 去除常量指针,转换非常量指针 and 常量对象被转换成非常量对象。
const char * const_cp;
char * nonconst_cp=const_cast<char *>(const_cp);
*/
/*dynamic_cast 该运算符把expression转换成type-id类型的对象。Type-id必须是类的指针、类的引用或者void *;
dynamic_cast主要用于类层次间的上行转换和下行转换,还可以用于类之间的交叉转换。
*/
return 0;
}