名称篡改是否适用于c++中的虚拟函数
Does name mangling apply to virtual functions in c++?
我们都知道C++中的所有函数只在编译时被名称篡改,所以这也适用于虚拟函数吗?
是。成员函数名称已损坏。他们需要嵌入他们的参数类型,这样你就可以用不同的参数类型重载他们。
理论上,编译器可以用其他方式对参数类型进行编码,但在某种程度上,每个函数体都需要用函数名及其参数类型来标记(并使用它来解析对它的引用)。所有主要的编译器都使用mangling。
名称篡改与成员函数是否虚拟无关;毕竟,虚拟方法可以像任何成员函数一样被非虚拟地调用。只有当编译器能够确定虚拟方法是通过vtable独占调用的,它才能避免为该方法生成任何链接器符号(只需将其地址插入vtable中)。但我不认为编译器有任何实际的方法可以知道一个方法没有在另一个编译单元中直接调用(就像它可以用于仅在当前编译单元中可见的函数一样)。
相关文章:
- C++无法定义虚拟函数 OUTER 类和头文件
- 用常见虚拟函数实现的任意组合来实现派生类的正确方法是什么
- 尝试将unique_ptrs推送到向量时使用纯虚拟函数错误
- 有没有比在库中添加一个并非由所有派生类实现的新虚拟函数更好的设计实践
- 类型擦除的std::function与虚拟函数调用的开销
- 重写虚拟函数和继承
- 用纯虚拟函数兜圈子
- 为什么使用存储在虚拟方法表中的地址调用虚拟函数的函数会返回垃圾?
- 禁止子函数调用父级的抽象(或虚拟)函数
- 无法在子类中使用虚拟函数C++
- 无法在派生对象上运行虚拟函数
- 我可以调用从 main() 覆盖的虚拟函数吗?
- 在 C++ 中将函数获取和设置为虚拟函数
- 使用在堆栈上创建的对象调用虚拟函数
- 为什么在这种情况下不调用我的虚拟函数实现?
- 在C++中使虚拟函数私有化
- 模板继承类中的虚拟函数
- 为什么构造函数的虚拟函数调用有时有效,但其他调用却无效
- doxygenc++虚拟函数和实现
- 如何从派生类函数中调用虚拟函数