在此代码,sref1并且sref2是的地址s,和地址是相同的.ref和之间有什么区别&?
fn main() {
let s = String::from("hello");
let sref1 = &s;
let ref sref2 = s;
println!("{:p}", sref1);
println!("{:p}", sref2);
f1(&s);
f2(s);
}
fn f1(_s: &String) {
println!("{:p}", _s);
}
fn f2(ref _s: String) {
println!("{:p}", _s);
}
Run Code Online (Sandbox Code Playgroud)
_sin f1和f2也是字符串的地址,f2将取得所有权,但打印f2的地址与打印的地址不同f1.为什么?
在模式中,&解构借用,ref通过引用而不是通过值绑定到位置。
换句话说,&让你通过借来到达,并ref说“借到我匹配的东西内的这个地方”
&并且ref是对立的。
#![feature(core_intrinsics)]
fn main() {
let x = &false;
print_type_name_of(x);
let &x = &false;
print_type_name_of(x);
let ref x = &false;
print_type_name_of(x);
}
fn print_type_name_of<T>(_: T) {
println!("{}", unsafe { std::intrinsics::type_name::<T>() })
}
Run Code Online (Sandbox Code Playgroud)
输出将如下所示:
&bool
bool
&&bool
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
139 次 |
| 最近记录: |