C++中类型转换的危险用法
C++中,出了基本类型以外,就是类类型。对一个类类型的实例,均叫做一个对象。实际上C++上面,只要是一个变量都可以称作对象。
但这里狗屎的问题就有了。对象的类型是有可能存在继承关系的。
以前在C语言里面,可以有这样的变量转换。
int a = 1000; long b = 0; b = (long)a; //这里做了强制转换
但如果在C++里面还是用C风格方式的类型转换就会存在很严重的问题。例如有这么一段代码
class IInterface_Me { protected: int a; } class CInterface_1 : public IInterface_Me { public: int b; } class CInterface_2 : public IInterface_Me { public: int c; } IInterface_Me* pInterface = new CInterface_1; CInterface_2* pInterface_2 = (CInterface_1*)pInterface; pInterface_2->b = 100; ///这里就要出错。
对于这个问题主要原因是由于c语言风格的类型强转,主要是由于编译器不做检查,因此在C++里面应该使用安全的类型转换修饰符(static_cast之类)。