c++ - 为什么 g++ 在编译后的二进制文件中存储类名?

标签 c++ gcc g++ virtual-functions

我注意到,如果我在由 g++ 编译的程序上运行 strings,输出包含它使用的各种类的名称。

程序是用 -O3 编译的,没有 -g-p,当我去掉二进制。

我想知道为什么 g++ 必须将此信息存储在二进制文件中?出现的类名似乎都是使用虚函数的类,所以我怀疑这与它有关。

最佳答案

这可能与 RTTI 有关,具体来说,RTTI 允许您查询给定变量的类的名称。查看typeid关键词。如果是这种情况,那么它就可以解释为什么它只发生在具有虚函数的类中——RTTI 仅适用于具有虚函数的类。

编辑:正如@xeno 指出的那样,它确实是 RTTI,如果您添加 -fno-rtti,则类名不会出现在字符串输出中。

关于c++ - 为什么 g++ 在编译后的二进制文件中存储类名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4948381/

相关文章:

c++ - 堆栈/堆中的 vector 元素?长输入,C++

c# - 从 c# 打开 .exe(c 程序)

c - GCC 和 VC++ 中的宏

c++ - 派生类中的constexpression,clang vs rest

c++ - 位设置问题

c++ - 尝试实例化新对象时出错

gcc - ld.exe : unrecognized option '-z'

c++ - 使用 g++ 的 undefined symbol

gcc - 将c++目标文件链接到c目标文件

c++ - libopencv_core.so.2.4 : error adding symbols: DSO missing from command line