类型转换conversion
算术转换(arithmetic conversion)
整型提升(integral promotion)
指针转换
转换为bool类型
转换与枚举类型
转换为const对象
显式转换
satic_cast, dynamic_cast, const_cast 和 reinterpreter_cast
static_cast:
编译器隐式执行的任何类型转换都可以由static_cast显式完成.
当需要将一个较大的算术类型赋值给较小的类型时,使用强制类型转换非常有用.
dynamic_cast:
e.g.: 假定Base是至少带一个虚函数的类,并且Derived类派生于Base类. 如果有一个名为 basePtr的指向Base的指针,就可以像这样在运行时将它强制转换为指向Derived的指针:
if (Derived *derivedPtr = dynamic_cast<Derived * > (basePtr)
{
// use Derived object to which derivedPtr points
}
else{
// use the Base object to which basePtr points
}
在运行时,如果basePtr实际指向Derived对象,则转换成功,并且derivedPtr将被初始化为指向basePtr所指的Drived对象;否则,转换的结果是0,意味着将derivedPtr置为0,并且if中的条件失败.
const_cast:
用以添加或删除const特性,用const_cast符来执行其他任何类型转换,都会引起编译错误.
e.g.:
const char *pc_str;
char *pc = string_copy( const_cast<char*> (pc_str));
reinterpreter_cast:
通常为操作数的位模式提供较低层次的重新解释.
旧式强制类型转换:
type (expr); //Function-style cast notation
(type) expr; // C-language-style cast notation.