Мэнглинг имён — это техника компилятора, которая кодирует имена функций в уникальные идентификаторы на основе их сигнатуры. Это закодированное имя передаётся линкеру, что позволяет ему различать функции с одинаковыми именами, но разными параметрами или находящиеся в разных пространствах имён.
C++ поддерживает перегрузку функций, когда несколько функций могут иметь одинаковые имена, если их параметры отличаются. Без мэнглинга имён линкер не смог бы различить эти перегруженные функции, что привело бы к ошибкам линковки.
Компилятор преобразует имя функции, используя следующую информацию:
const и ссылкиНапример, функция void print(int) может быть закодирована примерно как _Z5printi, а void print(double) становится _Z5printd.
extern "C", чтобы отключить мэнглинг, поскольку C не поддерживает перегрузкуМэнглинг имён необходим для того, чтобы C++ мог обеспечить типобезопасность и поддерживать перегрузку, при этом работая с традиционными линкерами, которые ожидают уникальные имена символов. Без этого механизма C++ не смог бы эффективно реализовать одну из своих ключевых возможностей: перегрузку функций.
Name mangling кодирует сигнатуру функции в уникальный идентификатор, который позволяет компоновщику различать перегруженные функции с одинаковыми именами, но разными параметрами.
Новый — ещё не проверен сообществом
Вы