6

什么是 C++ 中的运行时类型控制?

4

5 回答 5

4

它使您能够在运行时识别对象的动态类型。例如:

class A
{
   virtual ~A();
};

class B : public A
{
}

void f(A* p)
{
  //b will be non-NULL only if dynamic_cast succeeds
  B* b = dynamic_cast<B*>(p);
  if(b) //Type of the object is B
  {
  }
  else //type is A
  { 
  }
}

int main()
{
  A a;
  B b;

  f(&a);
  f(&b);
}
于 2009-09-11T09:23:17.167 回答
4

它不仅仅是关于 dynamic_cast,整个 RTTI 都是其中的一部分。了解 RTTI 的最佳地点是Bjarne Stroustrup的C++ 编程语言第 15.4 节

于 2009-09-11T09:41:51.350 回答
2

它的dynamic_cast功能 - 您的代码可以在运行时检测给定的指针或引用是否真的绑定到您期望的类型的对象。

于 2009-09-11T09:19:23.980 回答
2

它的正确名称是Run-time type information (RTTI)

于 2009-09-11T09:33:04.353 回答
0

您可以使用 Interface* 并“询问”c++ 指针指向的对象类型。据我所知,这依赖于运行时元信息,需要几个周期来存储和搜索这些信息。

查看“typeid”关键字。它提供了最大的魔力。

dynamic_cast 仅使用RTTI,带有 std::type_info 的typeid在我看来更像是“真实的东西”。

于 2009-09-11T11:58:16.267 回答