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

Xen*_*eno 11 c++ gcc virtual-functions g++

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

该程序是使用-O3和不使用-g或编译的,-p当我删除二进制文件时,类名仍然存在.

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

sas*_*alm 13

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

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