C++中4种强制类型转化。static_cast,const_cast,reinterpret_cast,dynamic_cast
2016-04-04 15:24
302 查看
C++中4种显示强制类型转化。
一个命名的强制类型转换形式如下:cast_name<type>(expression);
cast_name强制类型转化的名字,是4种之一,type要将表达式转换成的类型,expression是将要被转换的表达式。
(1)static_cast:任何具有明确定义的类型转换,只要不包含底层const,都可以使用static_cast。比如:
另外,对于编译器无法自动执行的类型转换也非常有用。如:
(2)const_cast:强制去除常数性,更确切地说是将指向常数对象的指针的指针转变为一个指向非常数对象的指针。
如:
(3)reinterpret_cast:可用来改变指针类型,或将一个指针类型转变为整型以及将整型转变为指针类型。因为转换效果与具体代码实现息息相关,需谨慎地使用reinterpret_cast。使用reinterpret_cast是非常危险的,就尽量避免使用。
(4)dynamic_cast:用于继承层次中的类型转换。在类层次间进行上行转换时,dynamic_cast和static_cast的效果是一样的;区别就是static_cast的类型是基本类型,而dynamic_cast的类型是类类型。
一个命名的强制类型转换形式如下:cast_name<type>(expression);
cast_name强制类型转化的名字,是4种之一,type要将表达式转换成的类型,expression是将要被转换的表达式。
(1)static_cast:任何具有明确定义的类型转换,只要不包含底层const,都可以使用static_cast。比如:
int i,j; double d = static_cast<double>i/j;
另外,对于编译器无法自动执行的类型转换也非常有用。如:
double d; void *p = &d; double *dp = static_cast<double*>(p);
(2)const_cast:强制去除常数性,更确切地说是将指向常数对象的指针的指针转变为一个指向非常数对象的指针。
如:
int i = 3; const int * pc = &i; *pc = 5;//这个是错误的,pc是一个指针常量,所指向对象的值不能改变 int * p =const_cast<int*>(pc);//去除pc 的const特性 *p = 5;//这个是可以的。
(3)reinterpret_cast:可用来改变指针类型,或将一个指针类型转变为整型以及将整型转变为指针类型。因为转换效果与具体代码实现息息相关,需谨慎地使用reinterpret_cast。使用reinterpret_cast是非常危险的,就尽量避免使用。
(4)dynamic_cast:用于继承层次中的类型转换。在类层次间进行上行转换时,dynamic_cast和static_cast的效果是一样的;区别就是static_cast的类型是基本类型,而dynamic_cast的类型是类类型。
相关文章推荐
- C/C++—— C++中函数重写和函数重载
- C语言所写的简单的贪吃蛇代码
- 猜数字(c语言实现)
- C++ 类型转换构造函数
- C++中的类模板详细讲述
- [转载]C++中类的组合
- C/C++—— C++中定义虚析构函数的原因
- C语言一些关于位操作符的小练习
- C++ 构造函数
- C/C++—— C++中构造函数不能是虚函数的原因分析
- C++ error: default argument given for parameter 1
- Count Primes
- 左旋转字符串m位
- CSP考试 2013年12月第3题 最大矩形 C语言实现
- 设计模式C++工厂模式
- C++的tie()函数
- [C++]字符串流 istringstream 和 ostringstream 的用法
- C/C++—— 在构造函数中调用虚函数能实现多态吗(Vptr指针初始化的过程分析)
- C++:标准IO(输入输出)
- C/C++—— C++编译器是如何实现多态