rust的const

  • 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后得到的新变量)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。