C++ RTTI 是否始终适用于所有平台?
Does C++ RTTI work always on all platforms?
依稀记得听人说过,运行-time类型识别在某些特殊情况下可能不起作用。因此我想问:C++ RTTI 是否始终在所有具有默认设置的平台上工作,或者是否存在可能无法实现或需要通过命令行参数明确启用它的情况?
不,不总是。
例如,it's off by default in Android,尽管您可以在那里简单地启用它。
此类 C++ 实现在技术上不兼容,同时禁用了 RTTI 或异常。
特别是对于小型嵌入式系统,RTTI 不可用。另一个例子是 8 位 AVR 目标。
原因很简单:RTTI 需要更多内存来存储信息本身。因此,对于小型嵌入式系统,它通常默认情况下处于关闭状态,或者根本没有像 avr-gcc 那样针对目标实现。
通常在 c++ 中,保证您不为不使用的东西付费。但是 RTTI 是一个例子,如果你不使用它,你也需要更多的内存,直到你为不需要 RTTI 的模块关闭它。
依稀记得听人说过,运行-time类型识别在某些特殊情况下可能不起作用。因此我想问:C++ RTTI 是否始终在所有具有默认设置的平台上工作,或者是否存在可能无法实现或需要通过命令行参数明确启用它的情况?
不,不总是。
例如,it's off by default in Android,尽管您可以在那里简单地启用它。
此类 C++ 实现在技术上不兼容,同时禁用了 RTTI 或异常。
特别是对于小型嵌入式系统,RTTI 不可用。另一个例子是 8 位 AVR 目标。
原因很简单:RTTI 需要更多内存来存储信息本身。因此,对于小型嵌入式系统,它通常默认情况下处于关闭状态,或者根本没有像 avr-gcc 那样针对目标实现。
通常在 c++ 中,保证您不为不使用的东西付费。但是 RTTI 是一个例子,如果你不使用它,你也需要更多的内存,直到你为不需要 RTTI 的模块关闭它。