为什么& str在Rust中被称为切片?

时间:2016-01-26 16:09:21

标签: rust

当我只是一个堆栈分配的字符串时,它让我觉得它是其他字符串的子字符串。我对它有错误的理解吗?

1 个答案:

答案 0 :(得分:14)

  

当它只是一个堆栈分配的字符串

这不完全正确。字符串切片(&str)在概念上由两件事构成:

  1. 指向字符串开头的指针。
  2. 字符串中的字节数。
  3. 指针可以引用堆栈上,堆上的数据,甚至是常量程序数据中的数据。

    它被称为字符串切片,因为它镜像一个常规切片(&[T]),它是相同的两个部分:指针和长度。

    在幕后,字符串是u8&[u8])的一片,但它有一个非常重要的保证:字节序列是有效的UTF-8。

      

    其他字符串的子字符串

    请注意,您可以使用"整个子字符串"或者"整个切片"某事,它不必严格地小。例如:

    let test_scores = [0, 10, 100];
    let all_scores = &test_scores[..]; // or &test_scores[0..3]
    let some_scores = &test_scores[0..1];