关于下列C++的程序:

class Base { };

class Child : public Base { };

int main()
{   
    // Normal: using child as base is allowed
    Child *c = new Child();
    Base *b = c;

    // Double pointers: apparently can't use Child** as Base**
    Child **cc = &c;
    Base **bb = cc;

    return 0;
}

海湾合作委员会产生以下错误的最后一个任务声明:

error: invalid conversion from ‘Child**’ to ‘Base**’

我的问题是在两个部分:

  1. 为什么没有隐性转换,从孩子**为基**?
  2. 我可以让这个例子的工作与C样式转换或 reinterpret_cast.使用这些转换装置扔掉所有类型的安全。有什么我可以添加到这类定义,以使这些指针铸隐含地,或至少短语的转换一种方式,允许我使用 static_cast 而不是?
有帮助吗?

解决方案

如果这是允许的,可以编写这样的:

*bb = new Base;

c 最终会向实例 Base.坏。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top