これは純粋な好奇心の問題であり、その答えが大きな改善をもたらすとは思いません。
この継承ツリーがあるとします。
A
/ \
/ \
AB AC
/\ /\
ABB ABC ACB ACC
オブジェクトの種類に基づいてさまざまなアクションを実行する関数を作成する必要があります。私は、このオブジェクトが AC オブジェクトまたはその子の 1 つにしかならないことを 100% 確信しています。
今、どちらのコードが速いですか:
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++ 標準では、継承のツリーをどのように管理する必要があるかについて何も述べていないため、答えは実装によって異なります。