为什么对象切片不发生在私有(private)继承中? Static_cast 在这种情况下会出错吗? 我知道私有(private)继承在其继承类之间不存在“is-a”关系。这是否与切片有关,因为派生不是基类型,所以编译器强制不进行隐式转换?
最佳答案
将派生类分割成它的私有(private)基类没有任何意义。想一想“私有(private)”的含义。这意味着外界不应该关心它。允许切片(类型转换)到私有(private)基地意味着外界会关心。
如果你真的想要这种行为(我很想听听你的理由),你可以绕过它:
class Base { };
struct Derived : private Base
{
Base asBase() { return static_cast<Base>(*this); }
};
这样,转换发生在 Derived 内部,其中 Base 是可访问的。您从 static_cast 得到的错误是因为它在 Derived 范围之外使用,其中 Base 不可访问。
关于c++ - 私有(private)继承中的对象切片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19075517/