簡體   English   中英

Rust中的String基本上是一個向量嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM