/**/ /**********************************************************static_cast<>揭密 简而言之,static_cast<> 将尝试转换,举例来说,如float-到-integer,而reinterpret_cast<>简单改变编译器的意图重新考虑那个对象作为另一类型。http://www.vckbase.com/document/viewdoc/?id=1651*********************************************************/ class CBaseX ... {public: int x; CBaseX() ...{ x = 10; } void foo() ...{ printf("CBaseX::foo() x=%d ", x); }} ; class CBaseY ... {public: int y; int* py; CBaseY() ...{ y = 20; py = &y; } void bar() ...{ printf("CBaseY::bar() y=%d, *py=%d ", y, *py); }} ; class CDerived : public CBaseX, public CBaseY ... {public: int z;} ; void main() ... { int a = 100; float b = 12.324; a = static_cast<int>(b); //正确.成功将 float 转换成了 int cout<<a<<endl; int a = 100; int *p = &a; float *b = static_cast<float*>(p); //错,这里不能将int*转换成float* int a = 100; void *p = &a; float *b = static_cast<float*>(p); //正确.可以将void*转换成float* CBaseX *pX = new CBaseX(); CBaseY *pY1 = static_cast<CBaseY*>(pX); //错误,不能将CBaseX*转换成CBaseY* CBaseX *pX = new CBaseX(); CBaseY *pY1 = reinterpret_cast<CBaseY*>(pX); //正确. “欺骗”编译器 pY1->bar(); //崩溃//正如我们在泛型例子中所认识到的,如果你尝试转换一个对象到另一个//无关的类static_cast<>将失败,而reinterpret_cast<>就总是成功“欺骗”//编译器:那个对象就是那个无关类}