THe core::cmp::Ordering类型有#[repr(u8)],但是在cmp方法中我们看到以下代码:
(*self as i32).cmp(&(*other as i32))为什么铸造不是u8
发布于 2022-04-20 09:27:12
为什么铸造不是为了u8?
第一个原因是Ordering的变体有值-1、0和+1,所以它首先需要一个i8。
虽然这只是int的一个替代,i32,但其原因仍然是i32,而不是缩小到i8是标准库整数使用指南
这些示例特别指出,这是一个not (3)实际上不适用的情况,而不是这个示例,而是一个非常接近的例子:
整数的基数将使用
u32。您可能会想到u8**,,因为大于256的基数并不有用,但是--有用的radices的域实际上要比小得多--所以使用**u8并不能提供有意义的保证,只会增加摩擦。
同样的道理也适用于排序,它可能是一个i8,但没有理由违反准则,这可能需要额外的编译器工作(因为一些平台只有32位以下所有操作的子集,例如ARM)。虽然对于16位寄存器的平台来说,一个缺点可能是个问题,但我不知道Rust是否支持或关心这些(我知道它支持16位以上的指针/地址,对GPRs不太确定)。
https://stackoverflow.com/questions/71936962
复制相似问题