4

私が読んだところならどこでも、ライブラリが RTTI を必要としないことを自慢しているか、記事でその使用を勧めているようです。それの何がそんなに悪いのか、それを必要としないのはなぜそんなに良いことなのでしょうか?

ありがとう

4

6 に答える 6

14
  1. 通常、これを使用すると、ポリモーフィズム ( if (type is foo) { do this; } else if (type is bar) { do that; } else ...) を覆すことになるため、これは通常、窮地に立たされ、設計を再考する必要があることを意味します。

  2. C++ コンパイラの作成者は、ポリモーフィック動作の最適化に多大な労力を費やしていますが、RTTI の使用の最適化にはそれほど力を入れていません。

于 2012-06-27T18:45:01.910 に答える
2

C++ では、テンプレートを使用して多くの静的トリックを使用できるため、RTTI の必要性が軽減されます (コンパイル時にはすべてが一般的ですが、実行時には具体的になります)。

反対に、クラスを処理する「真の」(SmallTalk のような) OOP の方法では、動的バインディングと RTTI が必要です。

C++ では両方が許可されますが、過剰な dynamic_cast と仮想関数はパフォーマンスを低下させる可能性があり、実際に低下します。

于 2012-06-27T18:45:47.627 に答える
1

簡素化された組み込みシステムの多くは、RTTI をサポートしない、より単純で小規模な実装になります。ライブラリがそれを必要としない場合は、より多くのシステムに移植できます。

于 2012-06-27T18:45:59.307 に答える
0

RTTIは、CRT(Cランタイム)のより大きな役割を導入します。C ++開発者は、実行速度を大切にしています。最後に必要なのは、アプリケーションを比較的遅くするランタイムの導入です。

于 2012-06-27T18:52:28.297 に答える
-1

RTTIは、設計時に指定されたグローバルに一意の序数がはるかに優れていることを実行します。RTTIを使用しない2つの理由。

パフォーマンス:スケーリングする実装を考え出すことは簡単ではなく、型を表すために序数/列挙型を使用します。名前空間の衝突は望ましくないため、文字列だけでなく、グローバルに一意の文字列を使用する必要があります。スクリプト言語では、すべてが文字列であるため、この種の言語で眉をひそめることはありません。

デザインエレガンス:序数ベースのタイピングが機能します。それを使用する場合は、最初からシステムを適切に設計する先見の明があった可能性があります。このような設計は、RTTIに依存するよりもほとんど常に優れています。

于 2012-06-27T18:52:41.300 に答える
-1

それは良いことではありません (RTTI を持っていない/使用していないこと)。バインドはできるだけ遅くする必要があります (ただし遅くはなりません)。速度と電力消費のニーズにより、バインディングをどれだけ遅くできるかが制限されますが、チップ技術の発展により、より多くのプロジェクトが後でバインディングを実行できるようになっています。後でバインドすると、より多くの情報が利用可能になったときに設計上の決定を行うことができ、より良い決定が可能になります。

于 2012-06-29T21:58:53.263 に答える