Names in C++ are mangled to ensure that MyClass::foo(int) is a distinct symbol from MyClass::foo(char) and AnotherClass::foo(int) The mangling needs to be repeatable, so that if I compile MyClass::foo(int) into an object file, and you compile another object file which depends on MyClass::foo(int), the two symbols have the same name and can be linked.