问题描述
dynamic_cast<type*>(e)
dynamic_cast<type&>(e)
dynamic_cast<type&&>(e)
在所有情况下,e
的类型必须是从目标类型公开派生的类类型、目标类型的 public
基类,或者与目标类型相同.如果 e
具有这些类型之一,则转换将成功。否则,演员表失败。如果指向指针类型的 dynamic_cast
失败,则结果为 0。如果指向引用类型的 dynamic_cast 失败,则运算符会抛出类型为 bad_cast 的异常。
-
据说“
e
的类型必须是从目标类型公开派生的类类型...”我认为他的意思相反,因为如果e
的类型}} 是从类型转换派生的,那么我们不需要转换或强制转换,因为它们可以通过继承隐式转换但通常:type
的类型必须是从 { 类型公开派生的类类型{1}}... -
你怎么看?我是否正确,这是书中的错误?
谢谢。
解决方法
我认为他的意思相反,因为如果 e 的类型是从类型转换派生的,那么我们不需要转换或转换,因为它们可以通过继承隐式转换
如果类型不同,则必须进行转换才能到达目标类型,无论该转换是隐式的还是显式的。
虽然我们确实不需要演员表,但这并不意味着演员表会失败。所以不,我不认为他们的意思相反。 Upcasts 通过动态转换成功,引用的文本是正确的。
但通常情况下:type 的类型必须是从 e 的类型公开派生的类类型...
这就是书中第二个条件的含义:
在所有情况下,e 的类型必须是 ...、目标类型的公共基类,或 ...