Я использую C++ во встроенной среде, где время выполнения виртуальных функций имеет значение. Я читал о редких случаях, когда виртуальные функции могут быть встроены, например: Являются ли встроенные виртуальные функции действительно бессмысленными? Принятый ответ гласит, что встраивание возможно только тогда, когда точный класс известен во время выполнения, например, при работе с локальным, глобальным или статическим объектом (не указателем). или ссылку на базовый тип). Я понимаю логику этого, но мне интересно, возможно ли встраивание в следующем случае:
class Base {
public:
inline virtual void x() = 0;
}
class Derived final : Base {
public:
inline virtual void x(){
cout << "inlined?";
}
}
int main(){
Base* a;
Derived* b;
b = new Derived();
a = b;
a->x(); //This can definitely not be inlined.
b->x(); //Can this be inlined?
}
С моей точки зрения, компилятор должен знать окончательный тип a
во время компиляции, так как это окончательный класс. Можно ли встроить виртуальную функцию в этом случае? Если нет, то почему? Если да, то делает ли это gcc-компилятор (соответственно avr-gcc)?
Спасибо!