gpt4 book ai didi

rust - 对于所有类型 `T` 、 `U` 是否真的,如果 `T` 被强制转换为 `U` 那么 `&T` 被强制转换为 `&U` ?

转载 作者:行者123 更新时间:2023-12-03 11:24:47 28 4
gpt4 key购买 nike

它是 well documented那个[T; n]可以强制到[T] .下面的代码也是well-formed :

fn test(){
let _a: &[i32] = &[1, 2, 3];
}
在这里,我们有 &[T; n]被强制到 &[T] .
是否适用于所有类型 T , U如果 T被强制到 U然后 &T被强制到 &U ?
它没有记录在引用文献中(至少是明确的)。

最佳答案

不,因为再添加一层 &导致它失败:

fn oops() {
let a: &[i32; 3] = &[1, 2, 3];
let _b: &&[i32] = &a;
}
error[E0308]: mismatched types
--> src/lib.rs:8:23
|
8 | let _b: &&[i32] = &a;
| ------- ^^ expected slice `[i32]`, found array `[i32; 3]`
| |
| expected due to this
|
= note: expected reference `&&[i32]`
found reference `&&[i32; 3]`
此外, [T; n] 并非如此。强制到 [T]&[T; n] 相同强制到 &[T] .您链接的文档描述了与非大小强制相关的两个特征: UnsizeCoerceUnsized . [T; n]工具 Unsize<[T]> ,因此 &[T; n]工具 CoerceUnsized<&[T]> ;这本质上是一回事,您的代码有效地演示了两者。不可能写出强制 [T; n] 的函数至 [T]不使用引用(或某种类型的指针),因为调整大小强制只发生在某种指针之后。

关于rust - 对于所有类型 `T` 、 `U` 是否真的,如果 `T` 被强制转换为 `U` 那么 `&T` 被强制转换为 `&U` ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63452165/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com