static_cast reinterpret_cast dynamic_cast cast c++ runtime overhead static-cast

reinterpret_cast - C++ static_cast tiempo de ejecución



static_cast c++ (1)

Vea el código a continuación.

a) ¿Tiene, en este caso (herencia simple, sin miembros virtuales), la conversión estática en B :: df () tiene alguna sobrecarga (alguna)? Encontré algunas respuestas conflictivas a preguntas similares, por eso estoy preguntando ...

b) Estaba pensando en hacer que la const M1 * func privada sea privada en A e introducir una nueva const M2 * func en el campo privado para evitar el reparto, pero esto complica las cosas y dificulta el uso de punteros inteligentes. ¿Ves una mejor manera de evitar el elenco?

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


static_cast<T>(e) es equivalente a crear una variable temporal inventada v de la siguiente manera:

T v(e); //where T is an arbitrary type and e is an arbitrary expression.

El costo de tiempo de ejecución de un static_cast es exactamente el costo de la declaración anterior