Re: static_cast and dynamic_cast
On Oct 11, 5:51 pm, MC <manan.cho...@gmail.com> wrote:
#include <iostream>
using namespace std;
class X{
public:
virtual void f(){}
};
class Y {
public:
virtual void g() {}
};
int main()
{
X * x = new X();
Y* y = dynamic_cast<Y*>(x); //A
// Y* y = static_cast<Y*>(x); //B
cout << y << endl;
}
When I try to typecast an unrelated class(not in its inheritance
hierarchy) into another as in the above example,
using a static_cast (line B) I get a compile time error. Whereas with
dynamic_cast the code compiles just fine.
I am curious why doesn't the compiler give a compile type error also
in the case of dynamic_cast?
{ Quoted signature & banner elided. -mod }
As others said, the conversion is defined therfor the compiler doesn't
give a compilation error - lol, I guess you figured that out for
yourself, as in "I am curious why...".
I would actually like to add a suggestion for *why* it is not
undefined, concerning your specific reference to cast of a pointer
between "unrelated classes" X and Y. For themselves X and Y are
unrelated, so static_cast makes no sense becuase is allowed only for
up-cast and down-cast.
class Z: public X, public Y {};
int main()
{
X* x = new Z(); // <------- Z instance
Y* y = dynamic_cast<Y*>(x); //A
// Y* y = static_cast<Y*>(x); //B
cout << y << endl;
}
Now dynamic_cast given a pointer X* to a subobject of an instance of Z
will be able to cast to the Y subobject. It's called cross-cast. So
there are cases when dynamic_cast between unrelated classes can
succeed, and will make sense for the programmer, therefor is allowed
to compile.
itaj
--
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]