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

5 rust

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

She*_*ter 14

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

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

  1. 指向字符串开头的指针.
  2. 字符串中的字节数.

指针可以引用堆栈上,堆上或甚至常量程序数据中的数据.

它被称为字符串切片,因为它镜像一个常规切片(&[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];
Run Code Online (Sandbox Code Playgroud)