Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > C++ > About RTTI

Reply
Thread Tools

About RTTI

 
 
Steven Lien
Guest
Posts: n/a
 
      08-19-2003
Hi all

As far as i know, there has 2 ways RTTI in C++
one is dynamic_cast and another is typeid

Since, my book only pointed me that to use "typeid" and "static_cast"
conjunction will be much more efficient than "dynamic_cast",
but what the book does not provide any evidence.

So my question can any explain to me why dynmic_cast is slower than typeid??

And since it's much slower, why not simply throw it away


Any Help will be appreciated





 
Reply With Quote
 
 
 
 
Buster
Guest
Posts: n/a
 
      08-19-2003
"Steven Lien" <(E-Mail Removed)> wrote in message
news:bhtfdi$cjl$(E-Mail Removed)...
> Hi all
>
> As far as i know, there has 2 ways RTTI in C++
> one is dynamic_cast and another is typeid
>
> Since, my book only pointed me that to use "typeid" and "static_cast"
> conjunction will be much more efficient than "dynamic_cast",
> but what the book does not provide any evidence.


I don't think that's true in general. In the example given in your book,
is the pointer type-checked once then used many times? If so, a
static_cast to the known object type will be faster than repeated
dynamic_casts. But I would use dynamic_cast to perform the check
in the beginning, unless there were a good reason not to.

> So my question can any explain to me why dynmic_cast is slower than typeid??
> And since it's much slower, why not simply throw it away
>
> Any Help will be appreciated



 
Reply With Quote
 
 
 
 
Victor Bazarov
Guest
Posts: n/a
 
      08-19-2003
"Steven Lien" <(E-Mail Removed)> wrote...
> As far as i know, there has 2 ways RTTI in C++
> one is dynamic_cast and another is typeid
>
> Since, my book only pointed me that to use "typeid" and "static_cast"
> conjunction will be much more efficient than "dynamic_cast",
> but what the book does not provide any evidence.


Could it be because it's really nonsense?

> So my question can any explain to me why dynmic_cast is slower than

typeid??

No. Because there is no such requirement or any evidence of that
in the language definition. You have to ask the authors of the
book you're referring to.

> And since it's much slower, why not simply throw it away


Again, I am not sure where you got that "much slower" nonsense,
but I believe they both are in the language because they serve
different purposes.

Victor


 
Reply With Quote
 
Mike Wahler
Guest
Posts: n/a
 
      08-19-2003

Steven Lien <(E-Mail Removed)> wrote in message
news:bhtfdi$cjl$(E-Mail Removed)...
> Hi all
>
> As far as i know, there has 2 ways RTTI in C++
> one is dynamic_cast and another is typeid
>
> Since, my book only pointed me that to use "typeid" and "static_cast"
> conjunction will be much more efficient than "dynamic_cast",
> but what the book does not provide any evidence.


Which book and author? Perhaps you need a better one.

-Mike



 
Reply With Quote
 
Ivan Vecerina
Guest
Posts: n/a
 
      08-19-2003
"Steven Lien" <(E-Mail Removed)> wrote in message
news:bhtfdi$cjl$(E-Mail Removed)...
| As far as i know, there has 2 ways RTTI in C++
| one is dynamic_cast and another is typeid
|
| Since, my book only pointed me that to use "typeid" and "static_cast"
| conjunction will be much more efficient than "dynamic_cast",
| but what the book does not provide any evidence.
|
| So my question can any explain to me why dynmic_cast is slower than
typeid??
|
| And since it's much slower, why not simply throw it away

Slower at what ? They serve very different purposes.
Consider:

#include <typeinfo>

class One { public: virtual ~One(){} };
class Two : public One {};
class Three : public Two {};

void isThisATwo(One* p)
{
// which one of the following values do you want ???
bool same1 = ( 00 != dynamic_cast<Two*>(p) );
bool same2 = ( typeid(*p)==typeid(Two) );
}

int main()
{
Three p;
isThisATwo(&p); // which result do you want?
}

dynamic_cast does a more exhaustive search, to tell you
whether an instance is of a specific type, *OR* any type
derived from it. typeid() cannot provide this information.



Additionally, dynamic_cast can perform casts that are
not accessible to static_cast:
class Base1 { public: virtual ~Base1(){} };
class Base2 { public: virtual ~Base2(){} };
class Derived : public Base1, public Base2 {};

void f(Base1* p1)
{
// can't be done with a static_cast...
Base2* p2 = dynamic_cast<Base2*>(p1);
}

int main()
{
Derived d;
f( &d );
}


Make sure to read other books about C++...


Regards,
--
Ivan Vecerina <> http://www.post1.com/~ivec
Brainbench MVP for C++ <> http://www.brainbench.com







 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
using rtti MoCha C++ 1 11-26-2003 07:40 AM
[RTTI] cast base class pointer to <templated> derived class pointer tirath C++ 3 10-12-2003 01:44 PM
RTTI versus a base class enum to represent type BillyO C++ 2 09-30-2003 10:21 PM
Re: RTTI John Harrison C++ 2 07-14-2003 02:36 PM
Re: RTTI Alf P. Steinbach C++ 0 07-14-2003 08:18 AM



Advertisments