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(); }

 

kein overhead an alle

InformationsquelleAutor Petr | 2011-06-22

Schreibe einen Kommentar