Самый популярный пример, иллюстрирующий, почему виртуальная диспетчеризация происходит во время выполнения, - это когда невозможно определить во время компиляции, какой класс Derived будет создан.Например:
Base* b = (rand() % 2 == 1 ? new Derived1() : new Derived2());
или когда это зависит от пользовательского ввода.
Предположим, что это не так, и во время компиляции можно полностью определить, какой производный класс ссылается на базовый указательto.
Если во время компиляции известно, на какой производный класс указывает указатель базового класса, оптимизирует ли компилятор вызов виртуальной функции , заменяя его соответствующей производной функцией и не делая vtableпоиск во время выполнения?