C++ static_cast Laufzeit-overhead
Siehe code unten.
a) ist in diesem Fall (einfache Vererbung, keine virtuellen Mitglieder), die statische cast-in B::df() haben keine overhead (auch immer)? Ich fand einige widersprüchliche Antworten auf ähnliche Fragen, deshalb Frage ich...
b) ich dachte über die Herstellung const M1 * func
privaten in Ein und der Einführung einer neuen privaten Bereich const M2 * func
in B zu vermeiden, der cast, aber es verkompliziert die Dinge und macht die Verwendung von intelligenten Zeigern schwieriger. Sehen Sie einen besseren Weg, um zu vermeiden, die Besetzung?
class M1 {
public:
double f() const;
};
class M2 : public M1 { public: double df() const; };
class A { protected: const M1 * func; public: A(const M1 * p); ~A(); double f() const; };
class B : public A { public: B(const M2 * p); double df() const; };
double M1::f() const { return 1973.0; }
double M2::df() const { return 0.0; }
A::~A() { delete func; } A::A(const M1 * p) : func(p) {} double A::f() const { return func->f(); }
B::B(const M2 * p) : A(p) {} double B::df() const { return static_cast<const M2*>(func)->df(); }
InformationsquelleAutor Petr | 2011-06-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
static_cast<T>(e)
entspricht der Erstellung einer erfunden temporäre variable v in der folgenden Weise:Die Laufzeit Kosten von ein static_cast ist genau die Kosten der oben genannten Anweisung
Sie sind die Gießen pointers. Eine Kopie des Zeigers (was kann optimiert werden entfernt, indem der compiler sowieso) ist eine negligable Betrieb. Ich würde nicht versuchen, es zu optimieren
InformationsquelleAutor Armen Tsirunyan