我从 C++FAQ 中找到了这个
一般来说,没有。
来自成员函数或某个成员的朋友
私有派生类,
与基类的关系是
已知,并且向上转换
PrivatelyDer* 到 Base*(或
PrivatelyDer& to Base&) 是安全的;不
需要或推荐演员。
然而 PrivatelyDer 的用户应该
避免这种不安全的转换,因为它
是基于私人决定
PrivatelyDer,并且可能会发生变化
不知不觉中。
上面这句话怎么理解呢?我认为这个解释不正确或准确。
我有这样的代码
class A{
};
class B: private A{
};
int main(){
B *b = new B();
A *a = new A();
a = b; //wrong
a = (A*)b; //right
}
从纯粹的机械角度来看,您是对的:对私有基类的强制转换将起作用并产生工作结果。
常见问题解答的要点是,从设计的角度来看,它通常是错误的。私有继承实际上应该意味着私有——换句话说,即使它可能起作用,你也不应该知道它会起作用,并且在某些时候它可能会停止工作——因为它是正式的实现细节,而不是作为公共接口的一部分,他们可以在不使用继承的情况下重新实现该类。到那时,强制转换将不再起作用(但是因为您已经使用了强制转换,编译器可能不会警告您它已经从您可能不应该做的事情变成了不可能工作的事情根本没有)。
编辑:是的,演员阵容does必然有效。根据标准§5.4/7:
...以下 static_cast 和
reinterpret_cast 操作
(可选地后跟 const_cast
操作)可以使用执行
显式类型的强制转换表示法
转换,即使基类
类型不可访问:
— 指向派生对象的指针
类类型或派生的左值
类类型可以显式转换
指向一个指针或一个引用
明确的基类类型,
分别;
[强调]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)