代码改变世界

C++中四种显示类型转换总结

2012-03-05 20:21  Rollen Holt  阅读(561)  评论(0编辑  收藏  举报
#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小节。