我明白为什么它们必须具有恒定的大小,但我不明白为什么必须在编译时知道该大小。即使 C 也允许在堆栈上使用可变长度数组。这个限制对 Rust 有什么帮助?
答案是什么锈病的`String`之间的区别`str`?描述了如何&str和String相互关系.
令人惊讶的是,a str比固定大小的数组更有限,因为它不能被声明为局部变量.编译
let arr_owned = [0u8; 32];
let arr_slice = &arr_owned;
let str_slice = "apple";
let str_owned = *str_slice;
Run Code Online (Sandbox Code Playgroud)
在Rust 1.32.0中,我明白了
error[E0277]: the size for values of type `str` cannot be known at compilation time
--> src/lib.rs:6:9
Run Code Online (Sandbox Code Playgroud)
这是令人困惑的,因为"apple"编译器可以知道它的大小,它只是不属于str类型的一部分.
是否存在Vec<T>< - > [T; N]和String< - > str所拥有类型之间不对称的语言原因?一个str[N]类型,它是一个简短的[u8; N]只包含可证明有效的UTF-8编码字符串,可以替换str而不会破坏大量现有代码吗?