以隐式方式键入不同类型之间的转换

时间:2011-08-15 22:05:52

标签: c++ casting operator-overloading type-conversion

我需要从A *到C *的隐式转换; 我不能改变A的定义或实现。

class A
{
};

struct B: public A
{
};

struct C: public B
{

};

当我写下以下内容时:

A* p;
C* q = p;

我收到错误C2440;无法从A *转换为C *。 我能做些什么,我无法改变A.这两个类都是原始数据的简单结构。

1 个答案:

答案 0 :(得分:5)

你能做到这一点的唯一方法是使用演员:

// a C++ style static_cast:
C* q = static_cast<C*>(p);

// or the less verbose C-style cast
C* q = (C*)p;

由于CA的衍生物而并非每A都是C ,因此无法隐式投放(就像您可以隐含地将C*投射到A*,因为CA (即A具有“更少或相同的功能”比C,但不是更多))。

我怀疑你真的必须指针类型之间的隐式转换。是什么让你认为你做的?