Может ли компилятор встроить виртуальную функцию, если я использую указатель в ясной ситуации?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Может ли компилятор встроить виртуальную функцию, если я использую указатель в ясной ситуации?

Сообщение Anonymous »

Я уже читал «Действительно ли встроенные виртуальные функции — это ерунда?». Но у меня все еще есть некоторые сомнения, и я не нашел там ответа.

Говорят, что если ситуация не двусмысленная, компилятор должен встроить виртуальную функцию .

Однако:


Это может произойти только тогда, когда компилятор имеет фактическую объект, а не указатель или ссылку на объект.


Ну и что, если у меня есть класс B, производный от класса A (который содержит виртуальный void doSth() функция), и я использую указатель B*, а не A*:

Код: Выделить всё

B* b = new B;

b->doSth();
  • Предположим, что B не имеет дочерних классов. Довольно очевидно (во время компиляции), какую функцию следует вызывать. Так что возможно быть встроенным. Так ли это на самом деле?
  • Предположим, что B имеет несколько дочерних классов, но у этих классов нет собственной функции doSth(). Таким образом, компилятор должен «знать», что единственная функция, которую нужно вызвать, — это B::doSth(). Я думаю, это не встроено?


Подробнее здесь: https://stackoverflow.com/questions/683 ... -situation
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»