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 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;
};
class M1 {
public:
double f() const;
};
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(); }
double M1::f() const { return 1973.0; }
double M2::df() const { return 0.0; }
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