为什么在 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",)
;
为什么我不能在这里使用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",)
;