as关键字执行基本的转换:
let x: i32 = 5;
let y = x as i64;
Run Code Online (Sandbox Code Playgroud)
然而,它只允许某些类型的铸造.
什么是那些特定种类的允许铸造的?
这里删除的答案解释说,有时您需要链接多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)是unsize信息的类型T- 特征定义的vtable(例如,fmt::Display或Iterator不Iterator<Item=u8>)或长度(或()ifT: Sized).请注意,在投射原始切片时不会调整长度 -
T: *const [u16] as *const [u8]创建仅包含原始内存一半的切片.转换不是传递性的,也就是说,即使
e as U1 as U2是有效的表达式,e as U2也不一定如此(事实上它只有在U1强制执行时才有效U2).
| 归档时间: |
|
| 查看次数: |
189 次 |
| 最近记录: |