rust的const
2023-12-09 本文已影响0人
wangfp
- const可以用于全局也可以用于某一具体struct的impl中
- const修饰的类型要求编译时大小可知
- const修饰的类型不一定要实现Copy,但其在赋值给局部变量的时候是通过
bitewise copy
的方式赋值的
struct T();
const C: T = T();
fn main() {
let a = C; // 可以通过编译,虽然T没有实现Copy trait
println!("&a=0x{:x}", &a as *const _ as usize);
let b = C; // 可以通过编译,虽然T没有实现Copy trait
println!("&b=0x{:x}", &b as *const _ as usize);
let c = a; // 因为T没有实现Copy trait,因此是一个move操作
println!("&a=0x{:x}", &a as *const _ as usize); // 编译报错,因为a的所有权已经被移动
println!("&c=0x{:x}", &c as *const _ as usize);
}
- const修饰的常量被赋值为局部变量时,局部变量可以是mut的(其实是一个常量的
bitwise copy
后得到的新变量)