在 c++ 中激活 RTTI
谁能告诉我在 unix 上工作时如何在 c++ 中激活 RTTI。 我听说它可以禁用和启用。 在我的unix环境中,我如何检查RTTI是否启用或禁用?
我在 HPUX 上使用 aCC
编译器。
Can anybody tell me how to activate RTTI in c++ when working on unix.
I heard that it can be disabled and enabled.
on my unix environment,how could i check whether RTTI is enabled or disabled?
I am using the aCC
compiler on HPUX.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
您使用的是
g++
或其他编译器吗?在
g++
中,IIRC默认启用RTTI,您可以使用-fno-rtti
禁用它。要测试它是否处于活动状态,请使用dynamic_cast
或typeid
UPDATE
我相信 HPUX 的
aCC
/aC++
也有RTTI 默认情况下处于打开状态,但我不知道如何禁用它。检查您的手册
页。Are you using
g++
or some other compiler?In
g++
RTTI is enabled by default IIRC, and you can disable it with-fno-rtti
. To test whether it is active or not usedynamic_cast
ortypeid
UPDATE
I believe that HPUX's
aCC
/aC++
also has RTTI on by default, and I am unaware of a way to disable it. Check yourman
pages.gcc 默认情况下启用它。检查
typeid(foo).name()
是否为您提供有用的信息:使用 out RTTI,您会得到类似以下内容的信息:
gcc has it on by default. Check if
typeid(foo).name()
gives you something useful:Without RTTI you get something like:
根据文档,没有选项可以将其关闭。标准 C++ 中唯一可以选择性禁用的两位是“for 循环中的变量范围”(
-Wc,ansi_for_scope,off
) 和参数相关的名称查找 (-Wc, -koenig_lookup,关闭
)。没有类似于-Wc,-RTTI,off
的选项According to the docs there is no option to turn it off. The only two bits of standard C++ that can be selectively disabled are "scope of variables in for loops" (
-Wc,ansi_for_scope,off
) and Argument-Dependent Lookup of names (-Wc,-koenig_lookup,off
). There's no option similar to-Wc,-RTTI,off
我知道的所有现代 C++ 编译器(GCC、Intel、MSVC、SunStudio、aCC)都默认启用了 RTTI,因此除非您怀疑它可能因某种原因被禁用,否则您可以放心地假设 RTTI 已启用。
All modern C++ compilers I know (GCC, Intel, MSVC, SunStudio, aCC) have RTTI enabled by default, so unless you have any suspects that it may be disabled for some reason you may safely assume that RTTI in on.
当通过编译器选项编译程序时,RTTI 将被启用或禁用 - 它不是在 Unix 环境中全局启用或禁用的。查看编译器是否默认启用它的最简单方法是尝试使用 RTTI 编译一些代码。
启用/禁用 RTTI 的选项将特定于编译器 - 您使用什么编译器?
GCC 中默认启用 RTTI 支持,选项
-fno-rtti
会关闭支持(如果您正在使用 GCC,并且可能有人在 makefile 或其他文件中关闭了 RTTI)。RTTI will be enabled or disabled when compiling your program via compiler options - it's not something enabled or disabled in the Unix environment globally. The easiest way to see if it's enabled by default for your compiler is to just try compiling some code using RTTI.
Options to enable/disable RTTI will be compiler specific - what compiler are you using?
RTTI support is on by default in GCC, the option
-fno-rtti
turns off support (in case you're using GCC and maybe someone's turned off RTTI in a makefile or something).启用和禁用 RTTI 必须是编译器特定的设置。为了使
dynamic_cast<>
操作、typeid
运算符或异常在 C++ 中工作,必须启用 RTTI。如果您可以编译以下代码,那么您已经启用了 RTTI(包括 g++ 在内的大多数编译器都会自动执行此操作):Enabling and disabling RTTI must be a compiler specific setting. In order for the
dynamic_cast<>
operation, thetypeid
operator or exceptions to work in C++, RTTI must be enabled. If you can get the following code compiled, then you already have RTTI enabled (which most compilers including g++ do automatically):在 g++ 中,您可以测试
__GXX_RTTI
宏 查看您的代码中是否启用了 RTTI。正如其他人指出的那样,g++ 中 RTTI 的 -no-rtti 轮次。我敢打赌这些东西在 clang 中也能工作。在较新的 C++ 中,我们将可以访问功能测试宏
__cpp_rtti
和许多其他将使这些事情变得更容易的东西。In g++ you can test the
__GXX_RTTI
macro to see if RTTI is on in your code. As others have pointed out -no-rtti turns of RTTI in g++. I would bet both these things work in clang as well.In newer C++ we will have access to feature testing macros
__cpp_rtti
and many others that will make tese things easier.