Говорят, что если ситуация не двусмысленная, компилятор должен встроить виртуальную функцию .
Однако:
Это может произойти только тогда, когда компилятор имеет фактическую объект, а не указатель или ссылку на объект.
Ну и что, если у меня есть класс B, производный от класса A (который содержит виртуальный void doSth() функция), и я использую указатель B*, а не A*:
Код: Выделить всё
B* b = new B;
b->doSth();- Предположим, что B не имеет дочерних классов. Довольно очевидно (во время компиляции), какую функцию следует вызывать. Так что возможно быть встроенным. Так ли это на самом деле?
- Предположим, что B имеет несколько дочерних классов, но у этих классов нет собственной функции doSth(). Таким образом, компилятор должен «знать», что единственная функция, которую нужно вызвать, — это B::doSth(). Я думаю, это не встроено?
Подробнее здесь: https://stackoverflow.com/questions/683 ... -situation
Мобильная версия