两次施放物体与一次性能相比

时间:2012-07-26 13:38:04

标签: c++

这是一个纯粹好奇的问题,我认为答案不会带来很大改善。

假设有这个继承树:

           A
          / \
         /   \
       AB     AC
      /\       /\
  ABB  ABC   ACB ACC 

我必须编写一个基于对象类型执行不同操作的函数。 我100%确定这个对象只能是一个AC对象或它的一个子对象。

现在哪个代码更快:

 int t = getObjectType();
 A*  obj = getObject();
 switch (t) {
      case 0:
         ACB* casted_obj = static_cast<ACB*>(obj);
      case 1:
         ACC* casted_obj = static_cast<ACC*>(obj);
 }

 int t = getObjectType();
 A*  sup = getObject();
 AC* obj = static_cast<AC*>(sup);
 switch (t) {
      case 0:
         ACB* casted_obj = static_cast<ACB*>(obj);
      case 1:
         ACC* casted_obj = static_cast<ACC*>(obj);
 }

可能C ++标准没有说明如何管理继承树,所以答案取决于实现。

1 个答案:

答案 0 :(得分:2)

静态强制转换完全在编译时完成,因此性能影响始终为零。在运行时完成的唯一类型转换是dynamic_cast。更多:http://www.cplusplus.com/doc/tutorial/typecasting/