C++ 入门第 5 版:dynamic_cast

问题描述

我有 C++ Primer 第 5 版中的这段文字

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 的类型必须是 ...、目标类型的公共基类,或 ...

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...