Я часто слышу о том, что компиляторы не могут определить точную реализацию метода для использования при определенных условиях. Например, мы можем представить сценарий (так говорят люди), где для родительского класса с методом foo(), который был переопределен в дочернем классе, компилятор не будет теперь выполнять какую-либо реализацию foo() для вызова до выполнения. Следовательно, у нас есть понятия динамической отправки, vtables и т. Д.Почему компиляторы не могут определить истинный тип переменной до времени выполнения?
Мой вопрос: точно Почему может ли компилятор не определить точную реализацию для вызова? Я остановился, чтобы задуматься об этом в последнее время, и я изо всех сил пытался оправдать это. Возможно, есть что-то действительно очевидное, что мне не хватает (я, вероятно, буду пинать, когда услышу ответ). Это просто до внешних обстоятельств? Если да, то как это получится?
Является ли это зависящим от языка ограничением или существует нечто более фундаментальное?
Тип выражения всегда известный во время компиляции. У вас есть код, который иллюстрирует то, о чем вы не уверены? –
Ну, вся концепция поддержки динамического полиморфизма ** сделана **, чтобы включить обнаружение/инъекцию типа во время выполнения. –
Отредактировано первое предложение. Возможно, теперь это понятно? И да, я думаю, я видел это с C++. Это статически типизированная функция? – Boon