Con un codice come di seguito, un compilatore può dire che a
è in realtà un'istanza di B
e ottimizzare la ricerca della tabella virtuale?Ottimizzazione delle ricerche di tabelle virtuali
#include <iostream>
class A
{
public:
virtual void f()
{
std::cout << "A::f()" << std::endl;
}
};
class B : public A
{
public:
void f()
{
std::cout << "B::f()" << std::endl;
}
};
int main()
{
B b;
A* a = &b;
a->f();
return 0;
}
domanda supplementare dopo le risposte di Jonthan Seng e Reima: Nel caso si usa gcc, sarebbe necessario utilizzare eventuali bandiere per costringerlo a ottimizzare la ricerca vtable?
L'unico modo per sapere con certezza è quello di guardare in assemblea. Ma sì, la virtualizzazione è un'ottimizzazione del compilatore standard. – Mysticial
È stato appena aggiunto lo smontaggio per GCC. Ho usato il flag '-O1' per le ottimizzazioni di base. – reima