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.这两个类都是原始数据的简单结构.
你可以做到这一点的唯一方法是使用强制转换:
// 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而不是更多)).
我怀疑你真的必须在指针类型之间进行隐式转换.是什么让你觉得你这样做?
| 归档时间: |
|
| 查看次数: |
125 次 |
| 最近记录: |