【发布时间】:2013-04-19 19:50:24
【问题描述】:
我知道应该避免 dynamic_cast,但假设我的程序中有一个 Base 类的对象 x,我知道在执行的某个时刻它也是 Derived 类(继承自 Base)。使用 static_cast 向下转换以调用派生方法等是否可以接受?或者这是否表明存在设计缺陷?
【问题讨论】:
-
你能举个例子吗?您通常向下转换指针或引用。您没有两种类型的对象。
-
“应避免dynamic_cast”是一个愚蠢的建议(就像这样的每一个绝对陈述),有合法的用例。
-
有时你必须这样做,但是是的,它通常表明,如果不是设计缺陷,至少是次优设计
-
@MatteoItalia 当然,这种建议应始终以“一般”为前缀。建议实际上应该是“通常使用
dynamic_cast表示您的程序中存在设计缺陷,并且应该有很好的理由这样做。”然而,我认为,我们应该教导人们不要将这种建议视为绝对的。 -
"是否可以使用 static_cast 向下转换以调用派生方法等?" 是的,绝对可以,只要您肯定 它实际上是一个
Derived。
标签: c++