为什么typeid对引用和指针的行为有所不同?

时间:2015-07-08 10:49:04

标签: c++ polymorphism typeid typeinfo

基本上我想知道的是,如果给出指向派生类型的指针,为什么typeid不返回派生类型的typeinfo。

示例:

如果有:

class Base {
  public:
    virtual void foo() {
      std::cout << "This is base speaking" << std::endl;
    }
};

class Derived : public Base {
  public:
    void foo() override {
      std::cout << "This is derived speaking" << std::endl;
    }
};

以下内容:

Derived obj;
Base& ref = obj;
Base* ptr = &obj;
std::cout << typeid(obj).name() << std::endl;
std::cout << typeid(ref).name() << std::endl;
std::cout << typeid(ptr).name() << std::endl;

会导致:

7Derived
7Derived
P4Base

虽然这个:

obj.foo();
ref.foo();
ptr->foo();

会导致:

This is derived speaking
This is derived speaking
This is derived speaking

我的猜测是Base *本身就是一个类型,即指向Base的指针,它不是多态的,因此是静态确定的。调用 foo 导致派生版本的原因是因为解除引用( - &gt;)。即使我是对的,我仍然觉得它有点令人困惑,因为 ptr 指向的对象实际上是派生

0 个答案:

没有答案