到目前为止,我有一个函数正在获取IArg类型的参数,我可以执行以下操作:

struct IArg
{
};

struct Arg : IArg
{
};

void f (IArg* arg)
{
// do something
}

f(new Arg);

现在,当我得到这个:
void f (std::shared_ptr<IArg> arg)
{
// do something
}

为什么它再次与
f(std::make_shared<Arg>());

即使std::shared_ptr<A>std::shared_ptr<B>相关,AB是不同的类型,对吗?

最佳答案

当且仅当std::shared_ptr<T>可隐式转换为std::shared_ptr<U>时,才能从U *隐式构造T *。请参见构造函数重载(9) on cppreference.com

09-06 23:12