Bhu*_*ant 1 c++ private-inheritance object-slicing
为什么私有继承中不会发生对象切片?Static_cast 在这种情况下会出错? \n我知道私有继承不保留 \xe2\x80\x9cis - 其继承类之间的 \xe2\x80\x9d 关系。这是否与切片有关,因为派生不是基类型,因此编译器强制不进行隐式转换?
\n将派生类切片为其私有基类没有任何意义。请考虑一下“私人”的含义。这意味着外界不应该关心此事。允许切片(铸造)到私人基地意味着外界会关心。
如果你真的想要这种行为(我很想听听你的理由),你可以绕过它:
class Base { };
struct Derived : private Base 
{
    Base asBase() { return static_cast<Base>(*this); }
};
这样,转换发生在 Derived 内部,而 Base 是可访问的。从 static_cast 得到的错误是因为它在 Derived 范围之外使用,而 Base 是不可访问的。