Имя искажения .
Все это делается во время компиляции. Компилятор C ++ на самом деле изменяет имена функций, которые вы даете ему внутри, так что такая функция, как
int foo(int a, float b, char c)
внутренне получает имя, эквивалентное
func_foo_int_float_char()
(реальным символом обычно является какая-то болтовня вроде ?CFoo@Foo@@QAAX_N@Z
).
Как видите, имя оформляется в зависимости от точного количества и типов передаваемых параметров. Поэтому, когда вы вызываете функцию, компилятору легко просмотреть передаваемые параметры, украсить ими имя функции и найти правильный символ. Например,
int a, b; float f; char c;
foo(a,f,c) ; // compiler looks for an internal symbol called func_foo_int_float_char
foo(a,b,c) ; // compiler looks for a symbol called func_foo_int_int_char
Опять же, все это делается полностью во время компиляции.