在c ++中激活RTTI

Vij*_*jay 33 c++ hp-ux rtti acc

在使用unix时,有人可以告诉我如何在c ++中激活RTTI.我听说它可以被禁用和启用.在我的unix环境中,我如何检查RTTI是启用还是禁用?

aCC在HPUX上使用编译器.

vla*_*adr 24

你在使用g++或其他一些编译器?

g++RTTI中默认启用IIRC,您可以使用它来禁用它-fno-rtti.测试它是否有效使用dynamic_casttypeid

UPDATE

我相信HPUX的aCC/ aC++默认情况下也启用了RTTI,我不知道有什么方法可以禁用它.检查你的man页面.


Edd*_*onk 20

gcc默认启用它.检查typeid(foo).name()是否为您提供了有用的东西.

#include <iostream>
#include <typeinfo>

int main()
{
 std::cout << typeid(int).name() << std::endl;
 return 0;
}
Run Code Online (Sandbox Code Playgroud)

没有RTTI你会得到类似的东西:

foo.cpp:6: error: cannot use typeid with -fno-rtti
Run Code Online (Sandbox Code Playgroud)


MSa*_*ers 8

根据文档,没有选择将其关闭.可以有选择地禁用的标准C++的唯一两位是"for循环中的变量范围"(-Wc,ansi_for_scope,off)和名称(-Wc,-koenig_lookup,off)的参数依赖查找.没有类似的选项-Wc,-RTTI,off


Art*_*yom 6

我所知道的所有现代C++编译器(GCC,Intel,MSVC,SunStudio,aCC)都默认启用了RTTI,所以除非你有任何怀疑它可能由于某种原因被禁用,你可以安全地假设RTTI已经启用.