Con el código siguiente, ¿puede un compilador decir que a
es de hecho una instancia de B
y optimizar la búsqueda de la tabla virtual?Optimización de las búsquedas de tabla virtual
#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;
}
pregunta adicional después de que las respuestas de Jonthan Seng y Reima: En caso se utiliza gcc, ¿sería necesario utilizar ninguna bandera para forzarlo a optimizar las operaciones de búsqueda vtable?
La única manera de saber con certeza es mirar a la asamblea. Pero sí, la desvirtualización es una optimización estándar del compilador. – Mysticial
Acaba de agregarse el desmontaje para GCC. Usé la bandera '-O1' para optimizaciones básicas. – reima