Nach ca. 6 o 7 Jahren Programmierung fast ausschließlich auf C++, habe ich entdeckt, dass:C++ static_cast über einen Zeiger auf virtuelle Basisklasse
struct A
{
virtual ~A() = 0; // Abstract class
};
A::~A() {}
struct B : virtual A
{};
int main()
{
A* a = new B;
(void)static_cast<B*>(a);
return 0;
}
einen Compiler-Fehler führt, weil der Standard darf nicht zu Führen Sie eine statische Umwandlung von einem Zeiger zu einer virtuellen Basisklasse durch. Ich gehe davon aus, dass das mit dem Speicherlayout einer virtuellen Basisklasse zusammenhängt, aber ich würde gerne die Details kennen.
Ihr Code kompiliert; meinst du nicht "struct B: public virtual A"? – lorro
Danke für die Warnung. Gelöst (ja, das meinte ich) –