0

これは純粋な好奇心の問題であり、その答えが大きな改善をもたらすとは思いません。

この継承ツリーがあるとします。

           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++ 標準では、継承のツリーをどのように管理する必要があるかについて何も述べていないため、答えは実装によって異なります。

4

1 に答える 1

2

静的キャストは完全にコンパイル時に行われるため、パフォーマンスへの影響は常にゼロになります。実行時に行われる唯一の型キャストはdynamic_castです。詳細:http ://www.cplusplus.com/doc/tutorial/typecasting/

于 2012-07-26T13:41:05.177 に答える