为什么在 Rust 中定义字符串文字时需要使用 &str?

Why do I need to use &str when defining a string literal in Rust?

为什么我不能在这里使用str

let question: &str = "why";

str&str有什么区别?

我知道 & 表示引用,但我对 &str 引用的内容感到困惑。

A str 是 UTF-8 编码字节序列 未知长度 ,在内存中的某处。

因为编译时不知道它的大小,所以不能直接入栈,必须使用引用

字符串文字(即 "why" 语法)在二进制文件的数据段中创建 space,并且 returns 对该位置的引用,这是一个 &str(特别是 &'static str,因为它永远不会被丢弃)。

如果你写 let question: str = "why";,这不会编译,原因相同:let i: i32 = &123; 不会编译。

P.S。 ("hello") 不是元组,它只是括号中的 &str 。如果要使用单个元素创建元组,请添加尾随逗号:let hello: (&str,) = ("hello",);