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

sra*_*mij 1 c++ casting operator-overloading type-conversion

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

class A
{
};

struct B: public A
{
};

struct C: public B
{

};
Run Code Online (Sandbox Code Playgroud)

当我写下面的内容时:

A* p;
C* q = p;
Run Code Online (Sandbox Code Playgroud)

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

Set*_*gie 5

你可以做到这一点的唯一方法是使用强制转换:

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

// or the less verbose C-style cast
C* q = (C*)p;
Run Code Online (Sandbox Code Playgroud)

因为它C是一个衍生物,A不是每个A都是aC,它不能被隐式地投入(就像你可以隐含地投射C*到一个A*因为每个C都是一个A(即A具有"更少或相同的特征" C而不是更多)).

我怀疑你真的必须在指针类型之间进行隐式转换.是什么让你觉得你这样做?