【问题标题】:Does C++ RTTI work always on all platforms?C++ RTTI 是否总是在所有平台上工作?
【发布时间】:2015-05-30 18:15:27
【问题描述】:

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

【问题讨论】:

  • 一些针对嵌入式平台的工具链可能默认禁用了 RTTI 和异常处理。
  • 可能重复:activate RTTI in c++
  • @πάνταῥεῖ 不是真的,不...

标签: c++ rtti


【解决方案1】:

不,并非总是如此。

例如,it's off by default in Android,尽管您可以简单地启用它。

在禁用 RTTI 或异常时,此类 C++ 实现在技术上是不合规的。

【讨论】:

    【解决方案2】:

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

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

    通常在 C++ 中,保证不会为不使用的东西付费。但是 RTTI 是一个例子,如果您在为不需要 RTTI 的模块关闭它之前不使用它,那么您也需要更多内存。

    【讨论】:

    • 那么异常呢?是一样的吗?
    • @Youda008:不完全一样。一些编译器可以在一些目标代码上生成异常处理,而无需一般开销。但是,是的,异常处理会在某些环境中产生总体开销。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-18
    相关资源
    最近更新 更多