有一个问题:切片是否有任何额外的数据,例如字符串末尾的零或字符串开头的字符串大小?
在此代码中:
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 次 |
最近记录: |