Ho qualcosa di simile a questo nel mio codice:tavoli virtuali su classi anonime
#include <iostream>
#include <cstdlib>
struct Base
{
virtual int Virtual() = 0;
};
struct Child
{
struct : public Base
{
virtual int Virtual() { return 1; }
} First;
struct : public Base
{
virtual int Virtual() { return 2; }
} Second;
};
int main()
{
Child child;
printf("ble: %i\n", ((Base*)&child.First)->Virtual());
printf("ble: %i\n", ((Base*)&child.Second)->Virtual());
system("PAUSE");
return 0;
}
mi aspetto questo per dare questa uscita:
ble: 1
ble: 2
E lo fa, quando compilato sotto GCC (3.4.5 credo).
compilazione e l'esecuzione di questo in Visual Studio 2008 tuttavia, dà questo:
ble: 2
ble: 2
Ciò che è interessante, è che se io do le struct nomi Base-derivato (struct s1 : public Base
), funziona correttamente.
Quale comportamento, se presente, è corretto? VS è semplicemente pazza o aderisce allo standard? Mi sto perdendo qualcosa di vitale qui?
Funziona come previsto in gcc.Anche se per essere sincero, mi aspettavo che non si compilasse. –
* VS aderente allo standard *? Ah ah ah ah ah ... – wallyk
Ehi, VC++ è diventato molto meglio. – GManNickG