标准c++中主要有四种强制转换类型运算符:
const_cast,reinterpret_cast,static_cast,dynamic_cast等等。
1、static_cast
static_cast(expression)将expression_r转换到独立地基于表达式中给出的类型type_id类型。没有运行类型检查被执行以确保转换的安全性。static_cast运算符可被用在例如转换一个基类指针到一个派生类指针的操作,这样的转换不总是安全的,相对而言,dynamic_cast是安全的。
(注意:static_cast<>()转换只是返回当前强制类型转换过后的值,也就是说,使用该操作符进行强制类型转换的时候,并不改变用于转换的源值,而只是暂时借用源值转换并保存值,所以要定义另外一个变量来保存转换以后的值。)
例:
class B { ... };
class D : public B { ... };
void f(B* pb, D* pd)
{
}
2、 dynamic_cast
例:
class A { ... };
class B { ... };
void f()
{
}
3、reinterpret_cast运算符允许任何指针被转换到任何其它指针类型,它还允许 任何整型转换到任意指针类型,且反之亦然。滥用reinterpret_cast运算符可轻易导致不安全,除非是所期望的转换是固有的低等级,否则你应使用其它转换运算符之一。
例:
class A { ... };
class B { ... };
void f()
{
}
4、const_cast运算符可被用于从一个类中除去const、volatile和_
例:
class A { ... };
void f()
{
//pb = pa; //
这里将出错,不能将const对象指针赋值给非const对象
...
}