as关键字执行基本的转换:
let x: i32 = 5;
let y = x as i64;
然而,它只允许某些类型的铸造。
那些是什么 某些种类 允许铸造?
这里的删除答案解释说,有时你需要连锁多个 as
- 实现安全结果的预测,无法一步完成。什么时候需要?
as关键字执行基本的转换:
let x: i32 = 5;
let y = x as i64;
然而,它只允许某些类型的铸造。
那些是什么 某些种类 允许铸造?
这里的删除答案解释说,有时你需要连锁多个 as
- 实现安全结果的预测,无法一步完成。什么时候需要?
我认为这不是很好,但是 这里 是您可能会发现有用的一些信息:
演员
e as U
如果满足下列条件之一,则有效:
e
有类型T
和T
胁迫U
; 强制铸e
有类型*T
,U
是*U_0
,或者U_0: Sized
要么 unsize_kind(T
)= unsize_kind(U_0
); PTR-PTR-投e
有类型*T
和U
是一种数字类型,而T: Sized
; PTR-地址铸e
是一个整数和U
是*U_0
,而U_0: Sized
; 地址-PTR-投e
有类型T
和T
和U
是任何数字类型; 数字播e
是一个类似C的枚举和U
是整数类型; 枚举投e
有类型bool
要么char
和U
是整数; 升麻INT-投e
有类型u8
和U
是char
; U8-炭投e
有类型&[T; n]
和U
是*const T
; 阵列-PTR铸e
是一个函数指针类型和U
有类型*T
, 而T: Sized
; FPTR-PTR-投e
是一个函数指针类型和U
是整数; FPTR-地址铸哪里
&.T
和*T
是可变性的参考, 和unsize_kind(T
)是那种不合格的信息 在T
- 特征定义的vtable(例如fmt::Display
要么Iterator
不是Iterator<Item=u8>
)或长度(或()
如果T: Sized
)。请注意,在投射原始切片时不会调整长度 -
T: *const [u16] as *const [u8]
创建仅包含的切片 原始记忆的一半。铸造不是传递性的,即使是
e as U1 as U2
是有效的 表达,e as U2
不一定是这样(事实上它只有在有效的情况下才有效U1
胁迫U2
)。
这是所有真实演员阵容的详尽列表。为简洁起见,我们将使用*来表示* const或* mut,并使用整数来表示任何整数原语:
- * T为* U,其中T,U:大小
- * T as * U TODO:解释未确定的情况
- * T为整数
- 整数为* T.
- 数字作为数字
- C-like-enum为整数
- bool为整数
- char为整数
- u8作为char
- &[T; n] as * const T.
- fn as * T其中T:Sized
- fn为整数