This is a question of pure curiosity, I don't think the answer could cause great improvements.
Let suppose there is this tree of inheritance:
           A
          / \
         /   \
       AB     AC
      /\       /\
  ABB  ABC   ACB ACC 
I have to write a function that executes differents actions basing on the object type. I'm 100% sure that this object can only be an AC object or one of its childs.
now which code is faster:
 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);
 }
or
 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);
 }
Probably C++ standards doesn't say anything about how the tree of inheritance must be managed, so the answer depends on the implementation.
 
     
    