问题1:
当启用双转换运算符重载,B +1有两种可能的解释,
(理性)B +(理性)1
和
(双人间)B +(双)
编译器不知道哪一个应该被用来转换,因此错误。
问题2:
对于整数1具有两个输出
我们不必直接转换为整数输出的ostream
二是先转换成理性的进一步输出
清除第一种方法是比较简单的转换较少,所以编译器会选择最简单的方式来拨打电话。
如果你想使用复杂的第二种方法,你需要代码显式指定,这样写回你的
一个动态转换,一个是静态转换。一般情况下使用static_case<类型>
就可以了。
同时,这个只有在高版本的C++编译器中才能识别。
dynamic_cast是试探映射,如dynamic_cast*pB意思是“我希望它是A*,并打算要求它是”。它通常被称为类层次的动态导航。
而static_cast通常可用于类层次的静态导航,无映射变换,窄化变换(会丢失信息)等等,static_cast的应用要广一些,但如前所提到的,在类层次导航变换中我们应该使用前者,因为后者static_cast可能意味着冒险(比如变换时类似于强制转换一样丢失信息)。但是在一个类层次中没有虚函数或者我们确定有其他允许我们安全向下映射的信息则后者static_cast更快一些。