2.4 若干重要的C++(www.cppentry.com)特性
在这一节里,我们将列出C++(www.cppentry.com)的一些附加特征。
2.4.1 强制类型转换
C++(www.cppentry.com)增加了4种新的强制类型转换:
我们将依次讨论它们。
1. static_cast
static_cast是最常用的强制类型转换,它常用来将一个数据类型转换到另一种数据类型并使用任何合理的转换方式。例如,从int型到float型。其他几个强制转换则用于特殊目的的转换。
例2-20
C语言的强制类型转换
在C++(www.cppentry.com)中变为
要转换成的类型放在尖括号中(如例中的float型),需要转换的表达式放在圆括号中(如本例中的hits和at_bats)。
2. const_cast
如同它的名字所示,const_cast用来强制去掉常数性,更确切的说法是将指向常数对象的指针转变为一个指向非常数对象的指针。
例2-21
程序清单2-2展示怎样使用const_cast。当函数find确定了数值4在数组a中的位置后,以const指针的形式返回该数据单元的地址。在main中,数组a并不是const,因此这种转换是安全的。
程序清单2-2 使用const_cast的程序
3. reinterpret_cast
reinterpret_cast可用来改变指针类型,或将一个指针类型转变为整型以及将整型转变为指针类型。因为转换效果与具体代码实现息息相关,需谨慎地使用reinterpret_cast。
例2-22
本例使用reinterpret_cast将float型指针转变为unsigned char类型指针。
4. dynamic_cast
dynamic_cast用于继承层次中的类型转换,我们将在5.5节进行详细讨论。