繁体   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