C++四种强制类型转换总结

1.static_case强制类型转换

   > 用于基本类型间的转换,但不能用于基本类型指针间的转换

   > 用于有继承关系类对象之间的转换和类指针之间的转换

如:

int main()
{
    int i = 0;
	char c = 'c';
	int * pi = &i;
	char* pc = &c;
	
	c = static_cast<char>(i);       //可以正常转换
	pc = static_cast<char *>(pi);   //不能正常转换,编译会报错
	
    return 0;
}

2.reinterpret_cast强制类型转换

   > 用于指针类型间的类型转换

   > 用于整数和指针类型间的强制转换 

如:

typedef void(PF)(int);

int main()
{
	int i = 0;
	char c = 'c';
	int *pi = reinterpret_cast<int *>(&c);      //可以成功转换
	char *pc = reinterpret_cast<char *>(&i);    //可以成功转换
	PF* pf = reinterpret_cast<PF*>(0x12345678); //可以成功转换
	
	c = reinterpret_cast<char>(i);              //转换失败,编译不通过
	return 0;
}

reinterpret_cast直接从二进制位进行复制,是一种极其危险的强制转换。

3.dynamic_cast强制类型转换

    > 主要用于类层次间的转换,还可以用于类之间的交叉转换

    > 具有类型检查的功能,比static_cast更安全

4.const_cast强制类型转换

     > 用于去除变量的const属性

如:

int main()
{
	const int& j = 1;
	int& k = const_cast<int&>(j);   //可以赋值
	const int x = 2;
	int& y = const_cast<int&>(x);   //可以赋值
	
	k = 5;
	
	printf(" j = %d\n",j);
	printf(" k = %d\n",k);
	
	y = 3;
	printf(" x = %d\n",x);
	printf(" y = %d\n",y);
	printf(" &x = %p\n",&x);
	printf(" &y = %p\n",&y);
	return 0;
}

运行结果为:

                                 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章