-qrtti和 -qnortti (-fno-rtti)(仅限 C++)
适用的调用
选项 | xlc (编译 C) | xlC (编译 C++) | xlclang(编译 C) | xlclang++(编译 C++) |
---|---|---|---|---|
-qrtti, -qnortti | ✓ | ✓ | ||
-fno-rtti | ✓ |
注: 此表中仅列出典型调用。 对于所有基本调用及其等效特殊调用,您可以参阅 编译器调用的完整列表 。
类别
等效编译指示
xlC 和其他旧调用命令 | xlclang + + 调用命令 |
---|---|
#pragma 选项 rtti | 无 |
用途
生成运行时类型标识 (RTTI) 信息以进行异常处理并供 typeid
和 dynamic_cast
操作程序使用。
语法
缺省值
xlc/xlC 和其他遗留调用 | xlclang/xlclang + + |
---|---|
-qnortti | -qrtti |
参数
- all
- 编译器生成 RTTI
typeid
和dynamic_cast
运算符所需的信息。 - 类型 | typeinfo
- 编译器将生成 RTTI
typeid
操作程序所需的信息,但不会生成dynamic_cast
操作程序所需的信息。 - dyna | dynamiccast
- 编译器将生成 RTTI
dynamic_cast
操作程序所需的信息,但不会生成typeid
操作程序所需的信息。
指定不带子选项的 -qrtti 等同于 -qrtti=all。
使用量
为了提高运行时性能,禁止使用 -qnortti 设置生成 RTTI 信息。
指定 -qrtti 编译器选项时,您应该了解以下效果:
- 当指定了 -qrtti 时,虚拟函数表的内容将不同。
- 将对象链接在一起时,必须使用指定的正确 -qrtti 选项来编译所有相应的源文件。
- 如果使用混合对象 (为某些对象指定了-qrtti ,为其他对象指定了 -qnortti ) 来编译库,那么可能会发生未定义的符号错误。
预定义的宏
- 当 -qrtti 生效时, __GXX_RTTI 预定义为值 1; 否则,未定义此值。
- 当 -qnortti 生效时, __NO_RTTI__ 定义为 1; 否则,将取消定义。
- 当 -qrtti 或 -qrtti=all 生效时, __RTTI_ALL__ 定义为 1; 否则未定义。