以下计划
#include <iostream>
#include <memory>
class Base
{
public :
virtual void print() { std::cout << "from base class\n"; }
};
class Derived : public Base
{
public :
void print() override { std::cout << "from derived class \n"; }
};
int main()
{
std::unique_ptr< Base > d = std::make_unique< Derived >();
std::cout << typeid( *( d.get() ) ).name() << "\n";
std::cout << typeid( decltype( *( d.get() ) ) ).name() << "\n";
}
第一个输出 7Derived 但第二个输出4Base。 不应该两个输出相同的类型? (7Derived)
答案 0 :(得分:0)
结果与预期的一样,不同之处在于指针的静态类型或指向对象的类型是否使用。
第一种情况,直接使用d
:因为d
指向Derived
类型的对象。这是打印对象的实际(运行时)类型。
在decltype
case:中,使用的是表达式的静态类型。由于d
是unique_ptr<Base>
,d.get()
的类型为Base*
,解除引用时会Base
。