鉴于以下代码:

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/

10-10 21:22
查看更多