почему компоновщик имеет более сложную задачу в C ++ по сравнению с C?

Интервьюер задал мне этот вопрос и не уверен, был ли мой ответ достаточно хорошим или нет. У кого-нибудь есть идеи?

2

Решение

Первая мысль, которая пришла мне в голову, была искажена. В C ++, но не в C, вы можете иметь два метода с одинаковым именем, но разными параметрами. Компилятор должен различать два метода и, таким образом, внутренне изменяет (искажает) имя.

Еще одна вещь, которую компилятор C ++ должен делать это не в C, это иметь дело с наследованием классов. У вас есть абстрактные классы, переопределенные методы и виртуальные методы. Это займет немного больше обработки, чтобы разобраться.

0

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

Не могу сказать, что понимаю это очень хорошо, но это запись в блоге Иана Лэнса Тейлора кажется, есть ответ. Цитирую оттуда:

Есть некоторые особые проблемы при использовании C ++. Добавление нового виртуального метода в класс может быть изменением ABI для любой функции, которая использует этот класс. Предоставить обратно совместимую версию класса в такой ситуации очень неудобно — нет естественного способа указать имя и версию для использования для виртуальной таблицы или информацию RTTI для старой версии.

Естественно, вы никогда не должны удалять символы.

Прочитайте запись для большего количества контекста. (ABI = двоичный интерфейс приложения)

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector