2012-04-25 14 views
13

私は、RTTIと例外を両方とも無効にしたプラットフォームと、両方を有効にしたプラットフォームでのコーディングを覚えています。しかし、私は、1つを有効にし、もう一方を無効にするプラットフォームでのコーディングを覚えていません。RTTIと例外との関係はありますか?

2つの概念には何らかの依存関係がありますか?言い換えれば、例外はRTTIを機能させる必要がありますか?それとも逆に?

+0

AFAIR MSVC 5または6にはデフォルトでrtti offとexceptionsが設定されています。間違っているかもしれない、それはずっと前だった。 –

+0

[RTTIと例外の直交性](http://monoinfinito.wordpress.com/2013/07/25/c-exceptions-under-the-hood-appendix-iii-rtti-and-exceptions-orthogonality)に関するこの記事/)はこのトピックに追加されています。エクスポーズされた機能は独立していますが、gccの例外は実際には独自のバージョンの "RTTI"を使用して動作することを示しています。 – Chuim

答えて

10

いいえ、例外はRTTI機能を必要とせず、その逆もどちらも独立した機能です。

一部の実装では例外(gccの-fnoexceptions)を無効にすることができますが、例外のRTTIが必要な実装はわかりません。

+6

例外として、type_infoやdynamic_castなどの明示的なC++ RTTI機能は必要ありませんが、確かにRTTIが必要です。スローされた例外は、ある種類のRTTIを含む例外スタック上のキャッチハンドラにその型を比較できる必要があります。 –

1

彼らはお互いに依存していませんが、どちらも重い機能なので、パフォーマンスの悪いプラットフォームがある場合はおそらく一緒にカットされます。

+0

これはかなり古くからの議論です。例外は例外が発生するまで実行時コストがゼロになります(例外的な場合にのみ発生します)。 RTTIは同様にコードサイズの増加のみです。コードサイズが問題になる場合は、両方ともサイズを追加しますが、有効にするだけでパフォーマンスが低下することはありません。 –

関連する問題