【编程开发】Rust 语法速查 & 例子 - 引用 & 指针

本文档是Rust学习笔记,主要翻译了cheats.rs上的内容,介绍了Rust中的引用类型(如共享引用、切片引用、原始指针、trait对象等),所有权系统,以及生命周期参数、绑定引用和静态生命周期的概念。
摘要由CSDN通过智能技术生成

本系列是学习 Rust 的学习笔记,本编主要对 https://cheats.rs/ 的语法速查表进行翻译学习

为非所有者内存赋予访问权限。另请参见 泛型 & 约束部分。

示例说明
&S共享引用 (可容纳 任意 &s)。
     ~~~~     &[S]特殊的切片引用,包含 (地址, 长度)。
     ~~~~     &str特殊的字符串切片引用,包含 (地址, 长度)。
     ~~~~     &mut S允许可变性的独占引用 (也有 &mut [S], &mut dyn S, …)。
     ~~~~     &dyn T特殊的 trait 对象 引用,包含 (地址, 虚函数表)。
&s共享借用 (例如,s 的地址、长度、虚函数表等,就像 0x1234)。
     ~~~~     &mut s允许可变性的独占借用。
*const S不可变的 原始指针类型,没有内存安全性。
     ~~~~     *mut S可变的原始指针类型,没有内存安全性。
     ~~~~     &raw const s创建原始指针而不通过引用;c. ptr:addr_of!() 🚧 🝖
     ~~~~     &raw mut s同上,但是可变的。🚧 需要原始指针来处理不对齐的、紧凑的字段。🝖
ref s绑定引用,使绑定为引用类型。🗑️
     ~~~~     let ref r = s;等同于 let r = &s
     ~~~~     let S { ref mut x } = s;可变引用绑定 (let x = &mut s.x),简写的解构版本。
*r解引用 引用 r 来访问它指向的内容。
     ~~~~     *r = s;如果 r 是可变引用,将 s 移动或复制到目标内存。
     ~~~~     s = *r;使 s 成为 r 引用的内容的副本,如果它是 Copy 的话。
     ~~~~     s = *r;如果 *r 不是 Copy,则不起作用 🛑,因为这会移动并留下空位。
     ~~~~     s = *my_box;对于 Box 的特殊情况,如果它不是 Copy,也可以移出 Box 的内容。
'a生命周期参数,用于静态分析流程的持续时间。
     ~~~~     &'a S只接受持有 s 的地址;地址的存在期至少为 'a
     ~~~~     &'a mut S相同,但允许地址内容被更改。
     ~~~~     struct S<'a> {}表示 S 将包含具有生命周期 'a 的地址。 S 的创建者决定 'a
     ~~~~     trait T<'a> {}表示 S 可能包含地址的 impl T for S
     ~~~~     fn f<'a>(t: &'a T)函数的情况相同。调用者决定 'a
'static特殊的生命周期,持续整个程序执行期间。

引用 & 指针简单示例:

  1. 引用和借用:允许对数据进行非所有者访问,而不移动所有权。示例:

    let s = String::from("hello");
    let reference = &s;
    
  2. 原始指针类型:不安全的裸指针,不提供任何安全保证。示例:

    let ptr: *const i32 = &10;
    
  3. 生命周期参数:用于指定引用的有效范围,帮助编译器进行借用检查。示例:

    fn longest<'a>(x: &'a str, y: &'a str) -> &'a str {
        if x.len() > y.len() {
            x
        } else {
            y
        }
    }
    
  4. 绑定引用:将引用绑定到变量上,可以通过解构语法轻松地访问引用的内部字段。示例:

    let s = String::from("hello");
    let ref reference = s;
    
  5. 生命周期参数化的结构体和 trait:允许在结构体定义或 trait 实现中引入生命周期参数,用于指定引用的有效范围。示例:

    struct StrWrapper<'a> {
        s: &'a str,
    }
    
  6. 静态生命周期:特殊的生命周期,持续整个程序执行期间。示例:

    static GLOBAL_VAR: i32 = 100;
    
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值