有一个问题:切片是否有任何额外的数据,例如字符串末尾的零或字符串开头的字符串大小?
在此代码中:
use std::collections::HashMap;
fn main()
{
let mut hashmap : HashMap< &'static str, &'static str > = HashMap::new();
hashmap.insert( "EUR", "Euro" );
hashmap.insert( "USD", "US Dollar" );
hashmap.insert( "CHF", "Swiss Francs" );
let usd = hashmap.get( "EUR" );
if let Some( usd ) = usd
{
println!( "usd : {}", usd );
}
// < usd : US Dollar
}
Run Code Online (Sandbox Code Playgroud)
HashMap 的键和值let mut hashmap : HashMap< &'static str, &'static str >可以具有任意长度。正确的?我不明白程序如何知道US Dollar长度/大小为 9?切片是否有任何额外的数据,例如字符串末尾的零或字符串开头的字符串大小?
游乐场就在这里。
当 Rust 引用指向 DST(动态大小类型)时,该引用包含该数据的长度以及指向数据开头的指针。在这种情况下,像这样的字符串"hello"的类型为&'static str,并且因为str未调整大小:
use std::mem::size_of;
assert_eq!(size_of::<&str>(), 2 * size_of::<usize>());
Run Code Online (Sandbox Code Playgroud)
一个usize用于指针本身,另一个用于长度。文档中的str表示&str解释了 a 如何成为包含有效 UTF-8 的切片(切片也未调整大小,因此引用带有长度)。
| 归档时间: |
|
| 查看次数: |
235 次 |
| 最近记录: |