鉴于以下代码:
class Base
{
public:
virtual ~Base() = default;
};
class Derived : public Base { };
int main(void)
{
Derived d;
Base* pb = &d;
Base** ppb = &pb;
Derived** ppd = ...; // Can this be defined in a type-safe manner?
return 0;
}
是否可以为
ppd
的赋值提供类型安全的表达式,而不引入 Derived*
类型的中间变量? 最佳答案
AFAIK,并非没有声明 Derived
指向 d
的指针。指向 Base
( d
) 的 pb
指针已经通过抽象丢失了类型信息,如果没有不安全的转换就无法恢复。
由于您要声明一个指向 Derived
的指针,因此您首先需要一个指向 Derived
的指针。例如:
Derived* pd = &d;
Derived** ppd = &pd;
这两个定义都是类型安全的,在编译时检查。
关于c++ - 以类型安全的方式将指针转换为指针,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44338171/