c++ - 以类型安全的方式将指针转换为指针

标签 c++ pointers

给定以下代码:

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,并非没有声明一个指向dDerived 指针。指向 d (pb) 的 Base 指针已经通过抽象丢失了类型信息,如果没有不安全的强制转换就无法恢复。

由于您要声明一个指向 Derived 的指针,因此您首先需要一个指向 Derived 的指针。例如:

Derived* pd = &d;
Derived** ppd = &pd;

这两个定义都是类型安全的,在编译时检查。

关于c++ - 以类型安全的方式将指针转换为指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44338171/

相关文章:

c++ - 渲染 n 体模拟

c++ - 您将如何在 C++/C 中解出 x 的数学方程

c++ - QAudioOutput - 应用程序大小不断增长

C++在分配值时对char *指针进行预增量与后增量

c++ - 指针分配与正常声明

c - 带有指针的意外 C 行为

c++ - 将 unique_ptr 与 gsl_vector 一起使用

c++ - 了解 "template argument is invalid"错误消息

c++ - 如何将指针的元素更改为 vector ?

python - 访问Python对象指针数据