我们都知道C ++中的所有函数都只是在编译时被破坏了,所以这也应用于虚函数吗?
答案 0 :(得分:2)
是。成员函数名称被修改。他们需要嵌入他们的参数类型,以便您可以使用不同的参数类型重载它们。
理论上,编译器可以用其他方式对参数类型进行编码,但在某种程度上,每个函数体都需要通过函数名称及其参数类型进行标记(并使用它来解析它的引用)。所有主要的编译器肯定都使用了修改。
答案 1 :(得分:1)
名称修改与成员函数是否为虚拟无关;毕竟虚拟方法可以像任何成员函数一样非虚拟地调用。只有当编译器确定虚拟方法是通过vtable专门调用时,它才可能避免为该方法生成任何链接器符号(只是在vtable中插入其地址)。但我不认为编译器可以知道某个方法没有直接在另一个编译单元中调用(因为它可以用于仅在当前编译单元中可见的函数)。