引用和借用
- 参数的类型是 &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. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载
声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性