【发布时间】:2017-06-02 22:17:46
【问题描述】:
给定以下代码:
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 提供类型安全的表达式?
【问题讨论】:
-
没有
Dervied*对象可以指向ppd。你首先得介绍一个。在你问之前,pb不是。 -
@IgorTandetnik 我已经更新了这个问题,所以很明显这个想法不是要引入
ppd的对象来指向。 -
T*类型的有效指针要么为空,要么指向T类型的对象。由于您在程序中的任何地方都没有Derived*类型的对象,也不愿意引入一个对象,所以ppd只能为空。我认为Derived** ppd = nullptr;不是您想要的答案。 -
没有。
Derived **不是Base **。无论您是否引入中间变量,任何从一个到另一个的转换都不是类型安全的。 -
@IgorTandetnik,谢谢。我喜欢
nullptr解决方案 :) 但确实不是我要找的那个。