您当前位置: 首页 » 2014-04-10
按日期归档: 2014-04-10

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之类)。

2014-04-10 | | object

C++中类型转换的危险用法已关闭评论