C++ C+中的动态强制转换有多昂贵+;?

C++ C+中的动态强制转换有多昂贵+;?,c++,dynamic-cast,C++,Dynamic Cast,对于使用各种后端(sdl、gl、d3d等)的GUI API,我希望动态地将泛型类型映像转换为任何可能发生的类型 所以底线是,我将每秒进行20*60fps的动态播放 动态演员有多贵?我会注意到它对性能有明显的负面影响吗?我有哪些替代方案可以保持可接受的性能水平?您不能使用#define定义您自己的强制转换,它在调试构建中使用动态#强制转换(这样您就知道您的强制转换是正确的)并执行简单的(MySubclass*)在发布版本中进行强制转换,因此没有性能成本?1200dynamic\u casts每秒不

对于使用各种后端(sdl、gl、d3d等)的GUI API,我希望动态地将泛型类型映像转换为任何可能发生的类型

所以底线是,我将每秒进行20*60fps的动态播放


动态演员有多贵?我会注意到它对性能有明显的负面影响吗?我有哪些替代方案可以保持可接受的性能水平?

您不能使用#define定义您自己的强制转换,它在调试构建中使用动态#强制转换(这样您就知道您的强制转换是正确的)并执行简单的(MySubclass*)在发布版本中进行强制转换,因此没有性能成本?

1200
dynamic\u cast
s每秒不太可能是一个主要的性能问题。在找到实际类型之前,您是在对每幅图像执行一个
dynamic_cast
,还是执行一系列
if
语句

如果您担心性能,实现多态性的最快方法是:

  • ---最快的---
  • 函数重载(仅限编译时多态性)
  • (仅编译时多态性)
  • 标记、开关和静态强制转换(脆性,不支持多级继承,维护困难,因此不建议用于不稳定的代码)
  • 虚拟函数
  • 访问者模式(反向虚拟函数)
  • ---几乎一样快---

在您的情况下,访问者模式可能是最佳选择。这是两个虚拟调用,而不是一个,但允许您将算法实现与图像数据结构分开。

在这种特殊情况下,您应该能够组织代码,以便只需要一次动态转换。我认为后端不会动态变化。

很难说。你为什么不试试它并测量性能呢?也许在早些时候是这样,但现在由于处理速度和编译器开发方面的所有优势,不尝试就很难知道。一个简单的so搜索会发现一些有趣的答案(不是完全重复的,但非常接近):和其他一些编程语言做动态强制转换的工作非常繁重,但它们每秒能完成数百万次这样的操作。我确信任何C++实现都应该能够做到1200秒!仅供参考:,在我看来,您应该重新考虑您的设计,以避免动态转换,因为您当前的设计违反了良好软件体系结构的许多原则(例如)。
dynamic\u cast
如果指针无法转换,则返回null。原始程序很可能依赖于此行为。@dfan或throws如果您正在转换引用
静态\u cast
则不会执行交叉转换,即使
动态\u cast
会成功。