Rust修仙之道 第十二章:宽度境 · 类型尺寸认知与不定形之术

第十二章:宽度境 · 类型尺寸认知与不定形之术

“形有大小,道有边界。不能测其尺者,不可轻控其灵。”

当顾行云修炼 Trait 技法至高阶,试图为“无定形灵体”设下术式时,Rust 编译灵印忽然警告:

“此灵不可确定尺寸:未满足 Sized 契约。”

他惊觉自己踏入了 Rust 类型系统的边界之门

一、Sized 灵印:能否知其尺寸

Rust 编译术默认:

  • 所有术体类型都需满足 Sized 约定;

  • 即:类型大小在编译时可知,堆栈空间可定。

基础类型如 i32, struct, enum 都是 Sized
而“接口灵体”如 dyn Trait[T] 由于大小未知,默认 Sized

二、?Sized:宽容印·允许未定形灵体

顾行云阅读灵术古卷,发现可使用 ?Sized 解除默认 Sized 限制:

fn log_info<T: ?Sized>(item: &T) {
    // 可接受 T 为 [str], [u8], dyn Trait 等非定长灵体
}

他首次领悟:?Sized 并非要你接受“不规则”,而是提醒你“不要做无法保证的事”。

示例:

struct BoxedInfo<T: ?Sized> {
    value: Box<T>,
}

他成功构建可容纳“任意形状灵气”的容器!

三、动态大小类型(DST)示例

类型Sized?备注
str必须通过引用或 Box<str> 使用
[T]切片,如 [i32],需用 &[T]Box<[T]> 包装
dyn TraitTrait 对象,用于运行时多态

顾行云感悟:“无定形灵体并非不可控,而是需用封印器器皿辅助承载。”

四、裸指术(*const T / *mut T):禁术之边

修炼至此,他误入“原生指针殿”,看见一行禁术铭文:

let p: *const i32 = &10 as *const i32;

他意识到这是超越 Borrow Checker 审核的灵指术,需手动保障:

  • 无借用检查!

  • 可发生悬挂、错误访问、甚至灵链崩塌!

于是他铭记于心:“裸指慎用,除非跨界。”

心诀 · 尺寸之道

有形可测者,皆可控;无形需封者,慎托之;知其大小,乃入混元之门。


⬅️ 上一章            下一章➡️

原创作者: niceWk 转载于: https://www.cnblogs.com/niceWk/p/18979519
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值