Ich habe etwas ähnliches wie dies in meinem Code:Virtuelle Tabellen auf anonyme Klassen
#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;
}
Ich würde erwarten, dass dies diese Ausgabe geben:
ble: 1
ble: 2
und es tut so, wenn sie unter kompiliert GCC (3.4.5 glaube ich).
Kompilieren und dies unter Visual Studio 2008 jedoch ausgeführt wird, ergibt dies:
ble: 2
ble: 2
Was interessant ist, das heißt, wenn ich den Grund abgeleiteten structs Namen (struct s1 : public Base
) geben, es funktioniert einwandfrei.
Welches Verhalten ist, wenn überhaupt, korrekt? Ist VS nur zimperlich oder hält es sich an den Standard? Fehle ich etwas Vitales hier?
Funktioniert wie erwartet in gcc.Um ehrlich zu sein, ich war es erwartet, dass es nicht kompilieren. –
* VS Einhaltung des Standards *? Ha ha ha ha ha ... – wallyk
Hey, VC++ ist viel besser geworden. – GManNickG