在 C++ 中,Name Mangling(名字修饰) 是编译器在编译阶段对函数、变量、类成员等符号名称进行改编的机制,目的是解决以下问题:
1. Name Mangling 的核心作用
-
支持函数重载:通过参数类型信息区分同名函数。
-
区分命名空间和类作用域:避免全局符号冲突。
-
保留类型信息:确保链接阶段能正确匹配符号。
-
处理模板和特殊成员函数:生成唯一标识符(如构造函数、析构函数)。
2. Name Mangling 的典型表现
示例代码
namespace MyNamespace {
class MyClass {
public:
void func(int x);
void func(double x);
static int var;
};
}
int MyNamespace::MyClass::var = 0;
GCC/Clang 生成的符号名(Itanium ABI)
# 成员函数 MyClass::func(int)
_ZN10MyNamespace