![]() |
1
2
基于什么? 您看到的行为已记录在案,并符合C规范。正如您可能想象的那样,类型推断规范相当复杂。我不会在这里引用全部内容,但如果你感兴趣的话,你可以自己复习。相关章节为 .
根据你写的评论,我认为至少部分困惑源于你忘记了有
此方法的参数,而不是两个(这会影响推理的进行方式)。此外,您似乎需要第二个参数
但我认为主要的是,您期望类型推断在类型差异方面比规范实际需要的更激进。 7.5.2.1第一阶段
需要推断两个类型参数,
在第二阶段,尝试修复这些类型。
因此,你最终会
当然,编译器使用它是合法的(如果不符合规范)
这会更改用于调用的表达式的类型,从而更改所使用的边界,最后当然还会更改在推理过程中选择的实际类型。但是在最初的调用中,编译器在推理过程中不需要使用与您指定的类型不同的类型,即使它本来是允许的,但事实并非如此。 使生效 |
![]() |
2
0
我敢肯定这是意料之中的行为。 我们感兴趣的方法签名是:
如果我们再看最后一个参数
在这一点上,编译器为什么还要寻找更多的东西呢?自然和明显的选择,没有铸造需要的作品,所以它使用。如果你不喜欢它,你总是可以选择做你做的,并明确指出通用参数。
当然你也可以把比较器做成
|
![]() |
softshipper · 为什么函子实现是可能的? 7 年前 |
![]() |
azal · 条件分布的均值和协方差 7 年前 |
|
Ian · 如何找到R中每n行的协方差 7 年前 |
![]() |
Marcel · C#泛型推断与协方差-错误或限制 7 年前 |
![]() |
Zac · 协方差混乱。无法将已实现接口的元组分配给元组列表 8 年前 |