发布于 2018-05-24 12:59:54
你把矫顽力和亚型混为一谈。
Derived f(Base x)是Base g(Derived x)的子类型,如果Derived是Base的子类型。int f(double x)不是double g(int x)的子类型,因为函数签名是根本不同的--像int这样的原始类型不是具有任何子类型关系的对象,而是值类型。在某些情况下,f和g可能是源代码兼容的:double y = f(42)也可以在Java中使用g。但根据调用函数的不同,调用站点将生成不同的代码。调用方而不是函数执行这些值的转换。C++模板有点不寻常,因为它们本质上执行类似宏的代码生成。因此,编写C++模板函数t是可能的,只要这些函数与源代码兼容,就可以处理f或g。但就语言而言,t(f)和t(g)调用完全不同的函数t<...>(...)。https://softwareengineering.stackexchange.com/questions/371481
复制相似问题