Rust中trait声明绑定'static生命周期代表什么含义?
Rust trait 生命周期约束含义说明
Rust 中 trait 名称后的冒号:本质是对实现该 trait 的类型加约束,它后面既可以跟其他 trait 代表 trait 继承(也就是你之前理解的实现当前 trait 必须先实现冒号后的 trait),也可以跟生命周期标记,代表实现该 trait 的类型必须满足对应的生命周期要求。
你给出的代码:
trait Display: 'static { fn print(&self); }
里的Display: 'static就是生命周期约束,具体含义是:所有实现了Display trait 的类型,必须满足'static生命周期要求。
满足'static生命周期要求的类型分为两类:
- 本身没有持有任何外部引用的自有类型,比如
String、i32、自定义的没有引用字段的结构体等,这类只要不被主动释放就可以一直持有,不存在依赖其他对象生命周期的问题 - 持有引用的话,所有引用的生命周期都必须是
'static,比如&'static str这种指向程序只读数据段的字符串切片,它的有效期和整个程序运行周期一致
这种约束的常见使用场景:
- 需要将实现该 trait 的类型存入全局静态变量
- 需要跨线程传递该 trait 的 trait 对象,不用担心生命周期提前结束导致悬垂引用
- 构造
Box<dyn Display>这类 trait 对象时如果没有手动指定其他生命周期,Rust 默认会要求 trait 有'static约束,避免未定义行为
内容的提问来源于stack exchange,提问作者Searene
相关产品推荐
相关产品推荐

