Qur*_*erd 6 string types reference rust borrowing
这是该str类型的使用方式:
let hello = "Hello, world!";
// with an explicit type annotation
let hello: &'static str = "Hello, world!";
Run Code Online (Sandbox Code Playgroud)
let hello: str = "Hello, world!"; 造成 expected `str`, found `&str`
为什么文本的默认类型str与所有原始类型、向量和String? 为什么是参考?
字符串和切片只能通过引用访问的设计决策有很多优点:
str不容易在堆栈上管理,而在堆栈&str上只有一个指针的大小(而可变长度数据驻留在堆上)。请注意,所有其他基本类型都有固定长度,每个引用都有固定长度(不是它指向的数据)和每个结构(这是一个组合)。&str是一个不可变的引用。如果您可以定义类型的变量,则str必须为let mut s: str = "str";. 堆栈上的不可变字符串很难管理,可以附加的字符串更难管理。str意味着每次移动都必须复制所有字符,这会降低性能。只复制引用并在堆上保持引用的数据不变更便宜。这并不是真正的零成本抽象。str不是唯一一种仅作为引用出现的类型&str(对于切片也是&[i8]如此,例如),因此对字符串处理的更改会使其他行为变得奇怪(或者必须相应地更改)。str。现在你想&str从这个函数返回一个。这是行不通的,因为引用最多与它指向的值一样长(尝试使用任何原始类型)。由于str是本地创建的值,因此它的寿命不能超过函数。字符串字面量始终是对静态字符串的引用的便利性解决了这个问题。这意味着您将不得不编写额外的代码来将您拥有的str放入一个静态变量中,这样您就可以返回&str. 因为静态引用是我需要的默认行为,所以我可以用很小的开销来编写它是非常方便的。| 归档时间: |
|
| 查看次数: |
554 次 |
| 最近记录: |