0

鉴于有以下结构类型:

struct A {};
struct B : A {};
struct C : A {};
struct D : B {};

我们有一段代码:

A a = f();

您将如何检查结构实际上是什么类型?即是A, B,C还是D?

如果需要,我可以给出我试图为此使用答案的上下文,但我认为没有必要。

4

2 回答 2

2

请注意,C++ 中的多态性仅适用于指针和引用,如果按值返回 A,它将始终是 A。如果函数 f() 返回 B 类型的类,则会发生切片。

如果更改函数以返回指向 A 的指针,则可以使用动态转换并检查是否返回 null。

A *a=f();
B *b=dynamic_cast<B*>(a);
if(b!=NULL)
{
    //a was of type B
}
于 2013-08-11T10:29:59.477 回答
0

是类型A。为什么?因为切片。

但是,如果f()返回一个A&,而您使用A& a = f();了,那么您有两个选择(都涉及 RTTI):

  1. 您可以使用typeid(a)并查看它name()或与type_info各种(子)类的对象进行比较。

  2. 您可以使用dynamic_cast: 例如,dynamic_cast<D*>(&a)如果a不是 type ,将返回 null D

于 2013-08-11T10:25:31.143 回答