表达式static_cast < type-id > ( expression)将 expression 转换成type-id指定的类型.但是在这个转换过程中没有运行时类型检查,不能保证转换的安全性。
使用方式
static_cast < type-id > ( expression )
static_cast可用于将父类的指针转换为其子类的指针。但是这种转换是不安全的。例如:
class B { ... };class D : public B { ... };void f(B* pb, D* pd){ D* pd2 = static_cast<D*>(pb); // not safe, pb may // point to just B B* pb2 = static_cast<B*>(pd); // safe conversion ...}
又如:
class B { ... };class D : public B { ... };void f(B* pb){ D* pd2 = static_cast<D*>(pb);}
void main()
{
B* d = new D();
B *b = new B();
f(d); //ok
f(b); //unsafe
}
static_cast也支持简单类型的转换. 例如:
typedef unsigned char BYTEvoid f(){ char ch; int i = 65; -- float f = 2.5; double dbl; ch = static_cast<char>(i); // int to char dbl = static_cast<double>(f); // float to double ... i = static_cast<BYTE>(ch); ...}
static_cast还可以将int变量转化为枚举类型。如果int类型的值不在枚举类型的数值范围内则返回一个未知的数。例如:
int main(int argc, char* argv[])
{
enum Color{Red=0, Blue, Green};
int ncol = 1;
Color mycolor =static_cast<Color>(ncol);
ncol = 3;
Color mycolor2 =static_cast<Color>(ncol);
return 0;
}
调试会发现,mycolor的值是Blue,而mycolor2的值是3,并不是Color定义中的某个值。