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.