以类型安全的方式将指针强制转换为指针

时间:2017-06-02 22:17:47

标签: 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;
}

是否可以为ppd的赋值提供类型安全的表达式,而不引入类型为Derived*的中间变量?

2 个答案:

答案 0 :(得分:3)

AFAIK,并非声明指向Derived的{​​{1}}指针。指向dBase)的d指针已经通过抽象丢失了类型信息,如果没有不安全的强制转换,则无法恢复。

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

Derived

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

答案 1 :(得分:1)

  

是否可以为ppd的赋值提供类型安全的表达式,而不引入类型为Derived*的中间变量?

嗯,有明显安全的选择:

Derived** ppd = nullptr;

否则:否。Derived**可以安全指向的唯一对象是Derived*。你没有Derived*对象,也没有兴趣介绍一个,所以你不能指向一个。

请注意,Base* Derived*的基础,因此Base**Derived**之间没有多态关系Base*Derived*