C ++ применяет искажение имен к именам функций и глобальным переменным. Локальные переменные не искажены. Проблема возникает потому, что в C вы можете получить доступ к адресу переменной или функции (например, в C ++), например. :
struct noob{
bool noobvar;
void noobvar(){};
};
Можно сказать, почему бы не применить искажение имен к локальным переменным, а затем иметь внутреннее локальное представление, такое как
bool __noobvar_avar;
void __noobvar_void_fun;
и предположим, что они получают адреса во время выполнения 0x000A и 0x00C0 соответственно.
Однако, если мы напишем где-нибудь в коде:
&noob::noobvar
Что должна делать программа?
- возвращает адрес переменной noobvar, то есть 0x000A
- возвращает адреса функции noobvar, то есть 0x00C0
Вы можете видеть, что, поскольку в C и, следовательно, в C ++ вы можете выдавать «адрес», недопустимо иметь переменные и функции с одинаковыми именами в одной и той же области разрешения.