返回类型协方差

**** 虚拟成员函数 m 的参数或返回值的协方差是其类型 T 在派生类’覆盖 m 中更具体的地方。然后,类型 T 以与提供 m 的类相同的方式( co ) 改变( 方差 )特异性。C++为作为原始指针或原始引用的协变返回类型提供语言支持 - 协方差适用于指针或引用类型。 ** **

C++支持仅限于返回类型,因为函数返回值是 C++中唯一纯粹的 out-arguments ,而协方差只对纯 out-argument 类型安全。否则,调用代码可以提供比接收代码期望的特定类型更少的对象。麻省理工学院教授 Barbara Liskov 调查了这个和相关的方差类型安全问题,它现在被称为 Liskov 替代原则,或 LSP

协方差支持基本上有助于避免向下转型和动态类型检查。

由于智能指针属于类类型,因此不能直接使用内置的协方差支持智能指针结果,但可以为产生原始指针的协变 virtual 函数定义明显协变的virtual 智能指针结果包装函数。