1

为什么对象切片不会发生在私有继承中?Static_cast 在这种情况下会出错吗?我了解私有继承在其继承类之间不存在“is - a”关系。这是否与切片有关,因为 derived 不是 base 类型,所以编译器强制不进行隐式转换?

4

1 回答 1

5

将派生类切片为其私有基类没有任何意义。想一想“私人”是什么意思。这意味着外界不应该关心它。允许对私人基地进行切片(铸造)意味着外界会关心。

如果你真的想要这种行为(我很想听听你的理由),你可以绕过它:

class Base { };
struct Derived : private Base 
{
    Base asBase() { return static_cast<Base>(*this); }
};

这样,转换发生在 Derived 内部,Base 是可访问的。您从 static_cast 得到的错误是因为它在 Derived 范围之外使用,其中 Base 不可访问。

于 2013-09-29T21:22:42.383 回答