Name mangling — это процесс кодирования имён функций или методов вместе с типами их параметров в уникальные внутренние имена. Этот механизм позволяет компилятору различать функции с одинаковыми именами, но разными сигнатурами — это ключевая фишка перегрузки функций в C++.
Компилятор преобразует имя функции, добавляя закодированную информацию о:
constНапример:
Foo::bar(int, long) const становится _ZNK3Foobar3Foolil (формат зависит от реализации)Обратная операция называется demangling — она переводит закодированные имена обратно в читаемый вид. Инструменты вроде c++filt умеют декодировать эти имена для отладки.
Name mangling зависит от компилятора и не стандартизован. Разные C++ компиляторы могут генерировать разные закодированные имена для одной и той же функции. Из-за этого бинарная совместимость между кодом, скомпилированным разными компиляторами, может быть проблематичной.
Понимание name mangling полезно при отладке, чтении вывода компилятора и работе с объявлениями extern "C" при взаимодействии с кодом на C.
Name mangling кодирует имена функций вместе с типами параметров и const квалификаторами, чтобы включить перегрузку функций и различить функции с одинаковыми именами, но разными сигнатурами.
Новый — ещё не проверен сообществом
Вы