用于类比较的C++ dynamic_cast vs typeid

Jon*_*Jon 22 c++ casting

可能重复:
C++等效于instanceof

我想知道dynamic_casttypeid之间的区别仅在于类比较(除了允许访问子类的方法的dynamic_cast和仅用于类比较的typeid).我发现一个两年前的StackOverflow问同样的问题: C++相当于instanceof.然而,它已经两岁了,我不想去找一个旧帖子(而且我不确定什么时候出现了typeid),所以我想重新问同一个问题,但有点不同.

基本上,我有A类和B类,其是正在采取在抽象类C. C类的子类都作为参数的方法和我想,以确定是否类C是真的A类或B类两者typeid的dynamic_cast正常工作,所以这更多的是最佳实践/表现的问题.我在猜测:

A* test = dynamic_cast<A*> someClassCVar
if (test != 0) { //it is of class A }
Run Code Online (Sandbox Code Playgroud)

要么

if (typeid(someClassCVar) == typeid(A)) {
   //it is of class A
}
Run Code Online (Sandbox Code Playgroud)

编辑:对不起,我忘了包含这些信息.ActiveMQ CMS文档声明使用dynamic_cast,但我认为这仅仅是因为它假定用户希望访问特定于子类的方法.对我来说,如果只需要进行类比较,似乎typeid会有更好的性能:http: //activemq.apache.org/cms/cms-api-overview.html

Max*_*kin 33

这两种方法有一个重要的区别:

if(A* test = dynamic_cast<A*>(&someClassCVar)) {
    // someClassCVar is A or publicly derived from A
}
Run Code Online (Sandbox Code Playgroud)

鉴于:

if(typeid(someClassCVar) == typeid(A)) {
   // someClassCVar is of class A, not a derived class
}
Run Code Online (Sandbox Code Playgroud)

  • @Jon:显然是第一个;) (2认同)