1
2
基于什么? 您看到的行为已记录在案,并符合C规范。正如您可能想象的那样,类型推断规范相当复杂。我不会在这里引用全部内容,但如果你感兴趣的话,你可以自己复习。相关章节为 .
根据你写的评论,我认为至少部分困惑源于你忘记了有
此方法的参数,而不是两个(这会影响推理的进行方式)。此外,您似乎需要第二个参数
但我认为主要的是,您期望类型推断在类型差异方面比规范实际需要的更激进。 7.5.2.1第一阶段
需要推断两个类型参数,
在第二阶段,尝试修复这些类型。
因此,你最终会
当然,编译器使用它是合法的(如果不符合规范)
这会更改用于调用的表达式的类型,从而更改所使用的边界,最后当然还会更改在推理过程中选择的实际类型。但是在最初的调用中,编译器在推理过程中不需要使用与您指定的类型不同的类型,即使它本来是允许的,但事实并非如此。 使生效 |
2
0
我敢肯定这是意料之中的行为。 我们感兴趣的方法签名是:
如果我们再看最后一个参数
在这一点上,编译器为什么还要寻找更多的东西呢?自然和明显的选择,没有铸造需要的作品,所以它使用。如果你不喜欢它,你总是可以选择做你做的,并明确指出通用参数。
当然你也可以把比较器做成
|
Glory Raj · 有什么方法可以使这两个块具有共同的功能吗 2 年前 |
milczi · Swift通用无强制展开向下投射 6 年前 |
bugs · Typescript-泛型类型扩展自身 6 年前 |
John Bustos · C#通用工厂模式,不说明通用工厂模式的类型 6 年前 |
Blankdud · 具有默认数据的通用对象创建方法 6 年前 |
Tim Hutchison · 从泛型对象列表中读取泛型值 6 年前 |