说简单的就是C里面的强制类型转换,只不过C++里面为了类型安全而这么做的。主要用于 基类与继承类之间。
C写多了,类型一般都强转,特别是指针。
int * a;
void * b = (void*)a;
char * c = (char*)b;
C++里的_cast结尾的还有另外两个,就是干类似活的,据说是为了类型安全,某些条件下会转换失败。
eg:
dynamic_cast
用于多态性的父子类型对象的指针或引用之间。
class A {
public:
virtual ~A (void) {}
};
class B : public A {};
class C : public B {};
int main (void) {
B b;
A* pa = &b;
cout << "pa = " << pa << endl;
cout << "---- dynamic_cast ----" << endl;
// pa实际指向B对象,转换成功
B* pb = dynamic_cast<B*> (pa);
cout << "pb = " << pb << endl;
// pa没有指向C对象,转换失败
C* pc = dynamic_cast<C*> (pa);
cout << "pc = " << pc << endl;//这里应该pc=NULL
}
dynamic_cast<const ObjectList&>(msg);