给定以下代码:
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;
}
是否可以在不引入Derived*
类型的中间变量的情况下,为ppd
的赋值给出一个类型安全的表达式?
最佳答案
AFAIK,并非没有声明一个指向d
的Derived
指针。指向 d
(pb
) 的 Base
指针已经通过抽象丢失了类型信息,如果没有不安全的强制转换就无法恢复。
由于您要声明一个指向 Derived
的指针,因此您首先需要一个指向 Derived
的指针。例如:
Derived* pd = &d;
Derived** ppd = &pd;
这两个定义都是类型安全的,在编译时检查。
关于c++ - 以类型安全的方式将指针转换为指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44338171/