static_cast类到另一个类?

时间:2011-12-09 23:21:51

标签: c++

我想将一个类转换为另一个类。我正在尝试使用几乎总能为我工作的static_cas,为什么它不能在以下工作?

struct Mouse
{
    Mouse() {}
    // .......
};

struct Mice
{
    Mice() {}
    // .........
};

int main()
{
    Mouse mouse;
    Mice mice = static_cast<Mice>(mouse);
}

2 个答案:

答案 0 :(得分:3)

如果Mice有一个接受鼠标的构造函数,或者鼠标有一个operator Mice(后者不是特别推荐),你只能将鼠标实例强制转换为鼠标。

答案 1 :(得分:0)

因为mouse不仅不是Mice的实例,而且也不可能。{/ p>

struct SomeBase
{
  //...
};
struct SomeDerived : SomeBase
{
  //...
};
struct Unrelated
{
  //...
};

SomeBase * b;
SomeDerived * d;
Unrelated * r;

//....

b = static_cast<SomeBase *>(d); //allowed, safe
d = static_cast<SomeDerived *>(b); //allowed, unsafe
r = static_cast<Unrelated *>(d); //not allowed, what is it even meant to do?