[英]Is String in Rust basically a vector?
從來源 :
pub struct String {
vec: Vec<u8>, // <- ?
}
impl String {
// ...
pub fn new() -> String {
String { vec: Vec::new() } // <- ?
}
// ...
}
是的,不是。 String
用於保存其數據的底層緩沖區是Vec
。 這是有道理的,因為通常你想要字符串和向量的類似分配策略。 在String
impl中手動完成所有分配將浪費時間和大量重復代碼。
但請注意, vec
字段是私有的,因此您無法直接訪問它(僅使用安全方法)。 這意味着(安全) String
接口可以在向量中強制執行有效的UTF8數據。
但是是: String
只是圍繞某種緩沖區的UTF8強制包裝器。
在Rust 1.0發布之前有一個相當長的討論關於是否通過接口公開這個內部向量。 討論的結果是保持有問題的方法as_mut_vec
。 在某些情況下,此方法當然很方便,但是以后無法更改字符串的實現。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.