以隐式方式在不同类型之间进行类型转换

Types conversion between different types in an implicit manner

本文关键字:之间 类型转换 同类型 方式      更新时间:2023-10-16

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

class A
{
};
struct B: public A
{
};
struct C: public B
{
};

当我写以下内容时:

A* p;
C* q = p;

我得到一个错误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;

因为CA的衍生物,而不是每个A都是C ,所以它不能隐式转换(就像你可以隐式地将C*转换为A*,因为每个C都是A (即A具有比C"更少或相等的特征",但不是更多))。

我怀疑你真的必须在指针类型之间使用隐式强制转换。是什么让你觉得你知道?