c++ RTTI在所有平台上都能工作吗?

Does C++ RTTI work always on all platforms?

本文关键字:工作 平台 RTTI c++      更新时间:2023-10-16

我隐约记得有人说过,运行时类型标识在某些特殊情况下可能不起作用。因此,我想问:c++ RTTI是否总是在所有具有默认设置的平台上工作,或者是否存在可能无法实现或需要通过命令行参数显式启用它的情况?

不,不总是正确的。

例如,Android默认是关闭的,但你可以简单地启用它。

当RTTI或异常被禁用时,这样的c++实现在技术上是不兼容的。

尤其对于小型嵌入式系统,RTTI是不可用的。另一个例子是8位AVR目标。

原因很简单:RTTI需要更多的内存来存储信息本身。因此,对于小型嵌入式系统,默认情况下它通常是关闭的,或者只是没有为目标实现,如avr-gcc。

通常在c++中保证不为不使用的东西付费。但是RTTI是一个例子,如果你不使用它,你也需要更多的内存,直到你关闭你的模块,不需要RTTI。