Использует ли C ++ статическое или динамическое разрешение имен?

Я читал про «Разрешение имен» в Википедии (Разрешение имени WIKI) и это было дано в том, что C ++ использует «Разрешение статических имен». Если это правда, тогда я не мог понять, как C ++ удается обеспечить «полиморфизм» без использования динамического разрешения имен.

Может кто-нибудь ответить, пожалуйста, использует ли C ++ «Статическое разрешение имен» или «Динамическое разрешение имен». Если он статический, вы также можете объяснить, как C ++ обеспечивает полиморфизм.

1

Решение

Определение разрешения имен в Википедии говорит о том, как токены преобразуются в имена конструкций (функций, типов и т. Д.). Учитывая это определение, C ++ составляет 100% статический с его разрешением имени. Каждый токен, который представляет идентификатор, должен быть связан во время компиляции с конкретной сущностью.

C ++ полиморфизм эффективно обманывает. Компилятор может видеть, что статическое имя разрешается в функцию-член, определенную с помощью virtual ключевое слово. Если компилятор видит, что вызываемый вами объект является динамическим объектом (т. Е. Указателем / ссылкой на этот тип, а не значением этого типа), компилятор выдает специальный код для вызова этой функции.

Этот специальный код не меняет название это решает до. Что это меняет, так это функция, которая в итоге вызывается. Это не динамическое именование; это динамическая функция отправка. Имя решается во время компиляции; функция разрешается во время выполнения.

7

Другие решения

C ++ использует статическое разрешение имен, потому что переименовывает каждую функцию, чтобы каждая из них имела уникальную.
Это означает, что функция int foo(int bar) будет известен компилятору как что-то вроде _Z3fooi, в то время как int foo(float bar) будет известен как что-то вроде _Z3foof,
Это то, что мы называем название искажения.

0

По вопросам рекламы [email protected]