Ich erkannte, dass diese Methode besonders nützlich ist, wenn Code debuggt, wenn ich eine externe Bibliothek nicht ändern/erstellen möchte.Statisches Casting auf falschen Typ
Bin noch meine Hände damit zu verbrennen oder ist das zumindest für das Debuggen sicher?
#include <iostream>
using namespace std;
class A
{
public:
A(int lx):x(lx){};
protected:
int x;
};
class B : public A
{
public:
void print(){std::cout << x << endl;}
};
int main() {
A *a = new A(22);
B *b = static_cast<B*>(a);
b->print();
}
Edit: was ist, wenn die Verwendung Ich verwende reinterpret_cast statt static_cast und stellen Sie sicher, dass B keine virtuellen Methoden hat, würde nicht die Erinnerung an A und B Spiel und es wird nicht sein ein UB richtig?
Also, was ist Ihre Frage? – teivaz
> Bin noch meine Hände damit verbrennen oder ist das zumindest sicher zum Debuggen? – tejas
Der Aufruf von 'b-> print()' ist formal undefiniertes Verhalten, da 'b' nicht auf ein' B' zeigt. Der einzige Weg, um sicher zu gehen, dass es für das Debugging sicher ist, ist das Testen mit Ihrer speziellen Werkzeugkette. Es wäre besser, einige Fähigkeiten in Klasse "A" zur Verfügung zu stellen, die für Debugging-Zwecke verwendet werden können. – Peter