引用和借用

  • 参数的类型是 &String 而不是 String
  • & 符号就表示引用:允许你引用某些值而不取得其所有权

借用

  • 我们把引用作为函数参数这个行为叫做借用。
  • 是否可以修改借用的东西?
    • 不行
  • 和变量一样,引用默认也是不可变的

可变引用

  • 可变引用有一个重要的限制: 在特定作用域内,对某一块数据,只能有一个可变的引用。
    • 这样做的好处是可在编译时防止数据竞争
  • 以下三种行为下会发生数据竞争:
    • 两个或多个指针同时访问同一个数据
    • 至少有一个指针用于写入数据
    • 没有使用任何机制来同步对数据的访问l
  • 可以通过创建新的作用域,来允许非同时的创建多个可变引用

另外一个限制

  • 不可以同时拥有一个可变引用和一个不变的引用。
  • 多个不变的引用是可以的

悬空引用 Dangling References

  • 悬空指针(Dangling Pointer):一个指针引用了内存中的某个地址,而这块内存可能已经释放并分配给其它人使用了。
  • 在Rust 里,编译器可保证引用永远都不是悬空引用:
    • 如果你引用了某些数据,编译器将保证在引用离开作用域之前数据不会离开作用域

引用的规则

  • 在任何给定的时刻,只能满足下列条件之一
    • 一个可变的引用
    • 任意数量不可变的引用
  • 引用必须一直有效

切片

字符串切片

  • 字符串切片是指向字符串中一部分内容的引用
  • 形式:[开始索引..结束索引]
    • 开始索引就是切片起始位置的索引值
    • 结束索引是切片终止位置的下一个索引值

注意

  • 字符串切片的范围索引必须发生在有效的 UTF-8 字符边界内。
  • 如果尝试从一个多字节的字符中创建字符串切片,程序会报错并退出

字符串字面值是切片

  • 字符串字面值被直接存储在二进制程序中。
  • let s =“Hello,World!”.
    • 变量 s的类型是 &str,它是一个指向二进制程序特定位置的切片
    • &str 是不可变引用,所以字符串字面值也是不可变的

将字符串切片作为参数传递

  • fn first_word(s:&String)-> &str [
  • 有经验的 Rust 开发者会采用 &str 作为参数类型,因为这样就可以同时接收 String和 &str 类型的参数了:
  • fn first_word(s: &str) -> &str [
    • 使用字符串切片,直接调用该函数
    • 使用 string,可以创建一个完整的 String 切片来调用该函数
  • 定义函数时使用字符串切片来代替字符串引用会使我们的 API 更加通用,且不会损失任何功能。

原文地址:http://www.cnblogs.com/huiteresa/p/16930371.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性