我記得在禁用了RTTI和例外的平臺上編碼,並且在其他已啓用它們的平臺上編碼。然而,我不記得編碼在一個平臺上,將啓用一個和禁用另一個。RTTI和異常之間是否存在關係?
這兩個概念之間是否存在任何依賴關係?換言之,異常是否需要RTTI才能起作用?或者相反?
我記得在禁用了RTTI和例外的平臺上編碼,並且在其他已啓用它們的平臺上編碼。然而,我不記得編碼在一個平臺上,將啓用一個和禁用另一個。RTTI和異常之間是否存在關係?
這兩個概念之間是否存在任何依賴關係?換言之,異常是否需要RTTI才能起作用?或者相反?
不,異常不需要RTTI功能,反之亦然,兩者都是獨立的功能。
某些實現可能允許您禁用異常(gcc中的-fnoexceptions),但我不知道任何需要RTTI的實現,異常或反之亦然。
也許異常不需要像type_info和dynamic_cast這樣的顯式C++ RTTI特性,但肯定它們需要某種RTTI。拋出的異常必須能夠將其類型與異常堆棧上的catch處理程序進行比較,這涉及某種RTTI。 – 2012-04-25 20:42:05
他們不相互依賴,但他們都是重要的功能,所以如果有一個表現不佳的平臺,他們可能會被剪切在一起。
這是一個非常過時的論點。異常在被拋出之前的運行時間成本爲零(這應該只發生在特殊情況下)。 RTTI同樣只是代碼大小的增加。如果代碼大小是一個問題,它們都會增加大小,但它們不會簡單地通過啓用來阻止性能。 – 2017-08-11 17:54:08
默認情況下,AFAIR MSVC 5或6有rtti off和異常。可能是錯誤的,很久以前。 – 2012-04-25 17:17:39
這篇關於[RTTI和例外的正交性]的文章(http://monoinfinito.wordpress.com/2013/07/25/c-exceptions-under-the-hood-appendix-iii-rtti-and-exceptions-orthogonality /)增加了這個主題。它表明,儘管公開的功能是獨立的,但gcc中的例外實際上使用他們自己版本的「RTTI」來工作。 – Chuim 2014-09-17 12:51:32