c++ 类型转换



const_cast,移除const属性。
  static_cast,父类->基类 普通类型之间的转换。
  dynamic_cast,动态类型转换。如子类和父类之间的多态类型转换。
  reinterpreter_cast,低级转换  执行取决编译器 不便移植  如一个pointer to  int。
  4种类型转换的格式,如:

 
  const_cast

  去掉类型的const或volatile属性。

const int a = 1;
int* p_a = const_cast<int*>(&a);
int& r_a = const_cast<int&>(a);
从一些 const TYPE ----> TYPE 。

  static_cast

  强制转换,无条件转换,静态类型转换。如下:

  1. 基类和子类之间转换:其中子类指针转换成父类指针是安全的。

Dervied* pd = new Dervied;
base* pb = static_cast<Base*>(pD);
先别想着Base->Dervied。(dynamic_cast)

  2. 基本数据类型转换。 struct, int, char, float等。

int i = 0;
double d = static_castdouble>(i)

  3. void* <----> TYPE*。
int* p = new int(1);
void* vP = static_cast<void*>(p);
int* iP = static_cast<int*>(vP);

  dynamic_cast

  安全的基类和子类之间转换,运行时类型安全检查,失败返回NULL:

在玩这个的时候用了vs试的,发现基类必须是有virtual属性。不然玩不了(不知道是c++标准规定还是编译器实现问题  待求证)。还没有用g++或者别的编译器试过。

class Base{
public:
	Base(){}
	virtual ~Base(){}
};
class dervied : public Base{
public:
	dervied() {}
	~dervied() {}
	void show() {//dosomething}

};

//如下
{
Base* baseObj = new Base;
dervied* deObj = dynamic_cast<dervied*>(baseObj);
}

  reinterpreter_cast

对类型的重现解释。

  1. 转换类型为指针、引用、算术类型。 常见的用法是将指针转成同字节宽度的int型,然后还可以将int转换成指针,前提是同字节宽。

还有函数指针类型之间进行转换。

	int a = 0;
	int* pa = &a;
	int result = reinterpret_cast<int>(pa);
	printf("%d",result);
	int* paRusult = reinterpret_cast<int*>(result);

int fun()
{
	//do something
	return 0;
}

void(*FuncPtr)();
FuncPtr = reinterpret_cast<void(*)()>(&fun);
(*FuncPtr)();
不同类型函数转换。
  移除const属性用const_cast。
  基本类型转换以及派生类到基类用static_cast。
  多态类之间基类到派生类daynamic_cast(介意不要使用  成本太高了。)。
  不同类型的指针以及到非指针类型转换用reinterpreter_cast。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值