为何const变量可配合'static生命周期使用?代码编译存疑
为什么从const返回&'static引用现在能编译通过?
Rust版本演进带来的行为变化
早期Rust版本(1.31之前)中,const定义的常量属于编译期复制值,不会存储在静态内存区域,直接取其引用无法获得'static生命周期,此时你的代码确实会触发报错。但从Rust 1.31开始,编译器新增了常量提升优化:当你引用const常量时,编译器会自动将该常量实例移入静态存储区,对应的引用也就拥有了'static生命周期,代码因此可以正常编译。当前版本中const与static的核心差异
const是编译期常量,默认每次使用都会被内联复制;只有当被引用时,才会触发静态提升,进入静态内存区static是静态变量,从定义开始就固定存储在静态内存区,其引用天然具备'static生命周期
你的代码里,&CANSWER被编译器自动做了静态提升,所以和返回&SANSWER的效果一致,不会出现报错。
验证早期版本的报错场景
若将Rust版本切换至1.30或更早,运行这段代码会得到类似如下错误:error[E0597]: `CANSWER` does not live long enough --> src/main.rs:6:5 | 6 | &CANSWER | ^^^^^^^^^ borrowed value does not live long enough 7 | } | - borrowed value only lives until here | note: borrowed value must be valid for the static lifetime...
内容的提问来源于stack exchange,提问作者Chen Ge
相关产品推荐
相关产品推荐

