Rust 字符串相加第二个参数为什么要是&str
let s = String::from("asdasd");
let v = String::from("asdasd");
let _s2 = s + &v;
Rust 字符串相加第二个参数为什么要是&str
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
为什么是借用
如果不借用的话,第二个参数就会被移动,完成字符串拼接之后,v 就不可用。
但这很不实用,因为字符串拼接不可避免要复制 v 的内容,没必要移动 + 复制,直接借用 + 复制,这样后面还能继续用 v。
那为什么第一个参数不是借用呢?主要是为了性能优化,重用底层的数组,减少复制,把多个字符串串拼接的复杂度从 O(n^2) 优化到 O(n) ,原理类似 Java 的 StringBuilder。
为什么是 &str 而不是 &String
这是一个常用的模式: Use borrowed types for arguments
主要是为了减少一层指针。(String 实现
Deref<Target=str>
,所以在函数需要&str
参数的时候,&String
自动强转换成&str
)rust 没有原生的字符串类型,只有字符类型。字符串被视为一种复合类型,
&v
实质是一个字符串切片