我正在使用 gcc-fno-rtti
标志在没有运行时类型信息的情况下编译我的 C++。
假设我没有使用dynamic_cast<>
or typeid()
,有什么可能导致我以后出现问题吗?
由于您的问题特定于 GCC,您应该仔细查阅您正在使用的版本的文档。 GCC 4.5.2 的文档说明如下。据我了解,这意味着如果你避免dynamic_cast()
and typeid()
,你应该没问题。
-fno-rtti
禁止生成有关每个类的信息
供 C++ 使用的虚函数
运行时类型识别功能
(dynamic_cast
and typeid
)。如果你
不要使用语言的这些部分,
你可以使用这个来节省一些空间
旗帜。注意异常处理
使用相同的信息,但它会
根据需要生成它。这dynamic_cast
运营商仍然可以
用于不需要的演员
运行时类型信息,即强制转换
到void *
或明确的基础
类。
关于虚拟功能和 RTTI 之间的关系的讨论可在没有 RTTI 但仍然是虚拟方法 https://stackoverflow.com/questions/34353751/no-rtti-but-still-virtual-methods。简而言之,虚拟函数在没有 RTTI 的情况下应该没问题。
正如此答案的评论之一正确指出的那样,混合使用不同 RTTI 设置编译的代码可能不起作用。来自最新的 GCC 文档:
将使用 -frtti 编译的代码与使用 -fno-rtti 编译的代码混合可能不起作用。例如,如果将使用 -fno-rtti 编译的类用作使用 -frtti 编译的类的基础,则程序可能无法链接。
避免此问题的一种方法是确保所有代码和依赖项均使用 -fno-rtti 进行编译。有关此问题的更详细讨论,请参阅 Andy G 的回答。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)