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

标签 c++ casting

Possible Duplicate:
C++ equivalent of instanceof

我想知道 dynamic_casttypeid 之间的区别仅在于类比较(除了 dynamic_cast 允许访问子类的方法和 typeid 仅对类比较有用)。我发现一个两年前的 StackOverflow 也在问同样的问题: C++ equivalent of java's instanceof .但是,它已经有两年了,我不想删除旧帖子(我不确定 typeid 什么时候出来),所以我想重新问同样的问题,但略有不同。

基本上,我有类 A 和类 B,它们都是抽象类 C 的子类。类 C 被作为方法的参数接收,我想确定类 C 是真的类 A 还是类 Btypeiddynamic_cast 都可以正常工作,因此这更多的是最佳实践/性能问题。我猜:

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

if (typeid(someClassCVar) == typeid(A)) {
   //it is of class A
}

编辑:抱歉,我忘记包含这一点信息。 ActiveMQ CMS 文档声明使用 dynamic_cast,但我认为这只是因为它假定用户会想要访问特定于子类的方法。对我来说,如果只需要一个类比较,似乎 typeid 会更好: https://activemq.apache.org/components/cms/overview

最佳答案

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

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

鉴于:

if(typeid(someClassCVar) == typeid(A)) {
   // someClassCVar is of class A, not a derived class
}

关于用于类比较的 C++ dynamic_cast vs typeid,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9704893/

相关文章:

c++ - cmake + cpp : No such file or directory

python - Python 扩展方法的段错误

c++ - unique_ptr 的动态转换

java - 自动施放 Spring Bean

arrays - 如何强制函数返回 int32 整数?

c++ - 我刚开始使用 Eigen 矩阵代数库,旨在创建数据集的相似矩阵,有什么建议吗?

c++ - 如果用户在int中输入了char,我该如何使用输入?

c++ - qt exe 应用程序的 dll 文件太大。该怎么办?

java - 方法接收更多数据类型的列表作为参数

Java 泛型扩展仍然会生成未经检查的强制转换警告