C++ c++;静态和动态铸造

C++ c++;静态和动态铸造,c++,dynamic-cast,static-cast,C++,Dynamic Cast,Static Cast,为什么static\u cast()(也称为downcast)不在运行时强制转换类型,而dynamic\u cast()(也称为upcast)在运行时强制转换类型?两者都用于在类层次结构中前进。它们之间有什么不同之处,以致于dynamic_cast()必须在运行时强制转换类型?这两种类型通常用于向下转换(从基类到派生类);向上投射总是安全的,因此不需要显式投射。如注释中所述,如果将它们用于向上转换,则两者都是等效的(并且等效于隐式转换) 对于向下转换,static\u cast速度更快,但有潜在

为什么
static\u cast()
(也称为downcast)不在运行时强制转换类型,而
dynamic\u cast()
(也称为upcast)在运行时强制转换类型?两者都用于在类层次结构中前进。它们之间有什么不同之处,以致于
dynamic_cast()
必须在运行时强制转换类型?

这两种类型通常用于向下转换(从基类到派生类);向上投射总是安全的,因此不需要显式投射。如注释中所述,如果将它们用于向上转换,则两者都是等效的(并且等效于隐式转换)

对于向下转换,
static\u cast
速度更快,但有潜在危险,因为它不执行运行时检查,如果转换无效,则会给出未定义的行为。它也适用于非多态类型,而
dynamic_cast
需要运行时类型信息,这些信息只能从多态类型中获得


你的入门书应该详细介绍这一点。

你在这一点上的角度是错误的:它们的行为方式是这样的,因为这就是它们的设计目的。我认为你切换了两个“强制转换”术语,但“静态强制转换”的用途不仅仅是向上转换。是的,它们可以切换,但我从未见过
dynamic\u cast
doupcasting<代码>静态_cast用于向下转换通常更多地出现在CRTP之类的东西中。你没有表现出任何研究成果。向上转换有一个隐式转换,但有时你可能需要显式转换。在这种情况下,
dynamic\u cast
static\u cast
是同义词。