根据rust doc,字符串切片为:
这个字符串是静态分配的,这意味着它保存在我们编译的程序中,并且在整个运行期间都存在。
矢量切片怎么样?这些字节码是硬编码的值吗?
Rust doc没有正确解释什么是矢量切片:
与& str类似,切片是对另一个数组的引用。我们可以使用as_slice()方法从向量中获取切片:
let vec = vec![1i, 2i, 3i];
let slice = vec.as_slice();
答案 0 :(得分:9)
实际上......它不是始终静态分配。请注意具体措辞:
let string = "Hello there.";
此字符串是静态分配的,这意味着它已保存在我们编译的程序中,并且在整个运行期间都存在(empahsis mine)。
在字符串文字的情况下,字符串是静态分配的,字符串切片引用它。但是,还有其他字符串切片的情况,它们引用动态分配的字符串。
通常, slice 是数组中连续的元素序列(数组所在的任何位置)。因此,在Rust:
T
s T
)
如果数组具有静态生命周期(即,在程序的整个持续时间内存在),则使用static
关键字表示:
&'static str
是具有这样生命的&str
(字符串切片),因此它是Rust中字符串文字的精确类型。
否则,生命周期通常与数组所有者的生命周期有关,例如:
let vec = vec!(1i, 2, 3); // create a dynamically allocated array of 3 `int`
let slice = vec.as_slice(); // create a slice into this array,
// the lifetime of which cannot (obviously)
// exceed that of the array.
因此,如果vec
的生命周期为'a
,那么slice
类型为&'a [int]
就可以在类型签名中看到:
fn as_slice(&'a self) -> &'a [T]
(来自std::vec::Vec
页面)