我记得在禁用了RTTI和异常的平台上进行编码,而在其他已启用它们的平台上进行编码。但是,我不记得在一个能够启用一个并禁用另一个的平台上进行编码。
这两个概念之间是否存在任何依赖关系?换句话说,异常需要RTTI才能运行吗?或者相反?
答案 0 :(得分:10)
不,例外不需要RTTI功能,反之亦然,两者都是单独的功能。
某些实现可能允许您禁用异常(gcc中的-fnoexceptions),但我不知道任何需要RTTI用于异常的实现,反之亦然。
答案 1 :(得分:1)
它们并不依赖于彼此,但它们都是重要的功能,所以如果有一个性能不佳的平台,它们可能会被切割在一起。
答案 2 :(得分:0)
我刚刚阅读了C ++提案“零开销的确定性异常:抛出值”(http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0709r0.pdf?),在其中阅读:
“ C ++允许存在多个任意类型的活动异常对象,这些对象必须具有唯一的地址且不能折叠;并且它需要使用RTTI在运行时匹配处理程序,这在所有主要实现中的开销都是不可预测的,并且可以取决于链接到整个程序的其他内容。”
和其他地方指出:
“ 4)当今的动态异常要求使用某种形式的RTTI来匹配处理程序。”
因此,异常与RTTI之间似乎存在联系